1

我正在尝试强制 Python 2.7 为 ctypes 打印格式化字符串POINTER(<type>)。我想我会写一个继承自 POINTER 和重载的类__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:无法创建实例:没有类型”只有 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 回答