1

Python 2.7 に ctypes の書式設定された文字列を出力させようとしていますPOINTER(<type>)。POINTER と overload から継承するクラスを作成することにしました__str__。残念ながら、このコードを実行すると:

from ctypes import *

pc_int = POINTER(c_int)
class PInt(pc_int):
    def __str__(self):
        return "Very nice formatting ", self.contents

print pc_int(c_int(5))
print PInt(c_int(5))

そのような例外で失敗します

$ python playground.py
<__main__.LP_c_int object at 0x7f67fbedfb00>
Traceback (most recent call last):
  File "playground.py", line 9, in <module>
    print PInt(c_int(5))
TypeError: Cannot create instance: has no _type_

予想される効果をきれいに達成する方法や、この例外の意味を知っている人はいますか?

「TypeError: Cannot create instance: has no type 」の Google 検索結果は 1 つしかなく、あまり役に立ちません。

ありがとう!

4

1 に答える 1

3

問題は、ctypes実装に使用されるメタクラスPOINTERおよび関連するクラスが、クラス ディクショナリで のような特別なフィールドを直接検索する_type_ため、継承された特別なフィールドを処理できないことです。

修正は簡単です:

pc_int = POINTER(c_int)
class PInt(pc_int):
    _type_ = c_int # not pc_int
    ...
于 2012-10-01T23:11:44.473 に答える