Cプログラマとしては、Pythonに構造体がないのがとても不満だ。
Pythonでは型を継承して新しい型を作れるらしいんだけど
イマイチというか全く理解できないので、
分かる範囲で頑張って構造体風のアクセス方法を考えてみた。
ただし、参照オンリー、char型オンリーではあるが、
ちゃんと考えればそれだって出来そうだ。
簡単にいうと
構造体のメンバ名とサイズを辞書型にして、それを順番にタプル型にいれておき、
それをstruct.unpackで読み込んでメンバ名の変数にいれてしまう。
exec()を使うのがミソで、Pythonはインタプリターなんだよなー、と実感。
うろ覚えで書いたので間違ってるかもしれんが。
クラス定義)
class hoge:
def __init__(self,strct_tbl):
self.__strct_tbl_=strct_tbl
def set_data(self,data):
__fmt_str_=""
__var_str_=""
for __var_ in self.__strct_tbl_:
__keyname_=__var_.keys()
__var_str_+="self.%ds" % __keyname_
__fmt_str_+="%s" % self.__strct_tbl_.values(__kename_)
__exce_str="("+__var_str_+")=struct.unpack('"+__fmt_str_+"',data)"
exec(__exec_str_)
例)
import struct
hoge_obj=hoge(({"year":4},{"month":2},{"day":2}))
hoge_obj.set_data("20120512")
これでhoge_objにyearとmonthとdayという名前のインスタンス変数ができて、
そこに"2012"と"05"と"12"が格納されているはず。