swigでpython extensionを生成すると、Cで定義した構造体は自動的に以下のような__repr__
が定義される。
<swig_mymodule.mytype; proxy of <Swig Object of type 'struct mytype *' at 0x7f6c74210a20> >
このままだとかっこ悪いのでなんとかしたいが、C側で(というかswigで)制御する方法はみつからなかった。
以下のように%pythoncode
内でsetattr
してやればswigが生成するpython code内にその内容が出力されるので、import時に上書きされるようになる
swig_mymodule.i
%pythoncode %{
import types
def __mytype_str(self):
return "<Mytype(…)>”
setattr(mytype, '__str__', types.MethodType(__mytype_str, None, mytype))
%}