我正在尝试强制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_
有谁知道如何干净地达到预期的效果或这个例外意味着什么?
只有1个谷歌搜索结果“TypeError:无法创建实例:没有类型”并且没有那么有帮助。
谢谢!
答案 0 :(得分:1)
问题是用于实现ctypes
及相关类的POINTER
元类直接在类字典中查找_type_
等特殊字段,因此无法处理继承的特殊字段
修复很简单:
pc_int = POINTER(c_int)
class PInt(pc_int):
_type_ = c_int # not pc_int
...