我正在围绕getifaddrs()
编写一个Python包装器。该接口使用struct ifaddrs
类型,其第一个字段是指向另一个struct ifaddrs
的指针。
struct ifaddrs {
struct ifaddrs *ifa_next; /* Pointer to the next structure. */
... /* SNIP!!11 */
};
但是,用Python表示:
class struct_ifaddrs(Structure):
_fields_ = [
('ifa_next', POINTER(struct_ifaddrs)),]
给出了这个错误:
matt@stanley:~/src/pydlnadms$ ./getifaddrs.py
Traceback (most recent call last):
File "./getifaddrs.py", line 58, in <module>
class struct_ifaddrs(Structure):
File "./getifaddrs.py", line 61, in struct_ifaddrs
('ifa_next', POINTER(struct_ifaddrs)),
NameError: name 'struct_ifaddrs' is not defined
在完成类定义之前, struct_ifaddrs
不会绑定到当前作用域。当然,作为一种指针类型,显然在声明过程中不需要struct_ifaddrs
的定义,就像在C中一样,但是在以后的使用过程中需要解析类型。我该怎么办?
答案 0 :(得分:5)
这个怎么样?
class struct_ifaddrs(Structure):
pass
struct_ifaddrs._fields_ = [
('ifa_next', POINTER(struct_ifaddrs)),]
正如Paul McGuire在评论中指出的那样,这被记录为the ctypes documentation和yet another time in the same docs中针对此问题的标准解决方案。