[この質問をしているので、私が見つけた:。http://www.cs.unc.edu/~gb/blog/2007/02/11/ctypes-tricks/良い答えを与える]すべてのctype構造クラスに対して__str__メソッドを設定するにはどうすればよいですか?
私はちょうどこれのctype-生成された構造クラスのFOO 'の__str__
方法を書いた:
def foo_to_str(self):
s = []
for i in foo._fields_:
s.append('{}: {}'.format(i[0], foo.__getattribute__(self, i[0])))
return '\n'.join(s)
foo.__str__ = foo_to_str
しかし、これは構造クラスに対して__str__
メソッドを生成するかなり自然な方法です。このメソッドを直接Structureクラスに追加すると、ctypesによって生成されたすべてのStructureクラスがそれを取得できるようになりますか?
(私は自動生成ctypesのコードにh2xmlとxml2pyスクリプトを使用していますが、これはクラス出力の名前を変更する明白な方法を提供しないので、単にサブクラス化構造、連合& Cを。そしてそこに私__str__
メソッドを追加しますxml2pyの出力を後処理する必要があります)。
悪ハックは、 'xml2py'出力と同じディレクトリに' ctypes.py'というファイルを作成しますが、実際の 'ctypes'モジュールからすべてをインポートし、'構造を上書きするだろう'あなた自身のバージョンで。しかし、これで私を引用しないでください... –
fooとは何ですか?インスタンスまたはクラス? –
はい、これは難しいです。 'TypeError:組み込み/拡張の型の属性を設定できません '_ctypes.Structure''は私を悩ませていました。私は通常のPythonクラスでそれを行うことができますが、私はctypeのことについては十分に分かりません。おそらくデコレータやメタクラスでできることがありますか? –