我正在用ctypes封装一个大型的C库。 ctypesgen生成包装代码(我自己不怎么做)。作为包装C结构作为对象的ctypes的一部分,它们中的一些在C中具有“setter”,只是将它自己继承下来以便使用。这里有什么可能的危险?或者,这看起来可行,但感觉很可怕。或者,还有更好的方法?我不想修改ctypesgen生成的python。Python类是它自己的一个子类,这可以吗?陷阱?
class some_struct(ctypes.Structure):
_fields_ = [ ('a', ctypes.c_int), ('b', ctypes.c_double) ]
再有就是交流功能set_some_struct_defaults()我他们实施这样:
class some_struct(some_struct):
def __init__(self):
set_some_struct_defaults(self)
这样的想法是,“新” some_struct具有调用C“二传手”的初始化函数所以后来当我初始化一个Python对象我得到的所有默认值(这当然是很多比这个玩具例子比较复杂):
val = some_struct.some_struct()
意见我有:
- 导入的顺序现在很重要,如果从wrapping.py中导入some_struct,然后从扩展它的类中导入some_struct,那么顺序是错误的。不理想。
AFAIK,应该工作。它不是继承自己*,它创建一个新类,然后给它一个相同的名字。但正如你所说,小心导入它。 – 2011-01-20 18:21:29