为什么我不能用 ctypes 结构修改超类属性的值?



我有两个类Foo和Foo2。Foo应该有一个通用属性,稍后将使用Foo2实例进行修改。 代码如下:

from ctypes import *
class Foo(Structure):
_fields_ = [('address', c_uint32)]
_var = None
@property
def var(self):
return self._var
def __init__(self, var=0):
super(Foo, self).__init__()
self.var = var
@var.setter
def var(self, value):
self._var = value

class Foo2(Foo):
_fields_ = [('First', Foo),
('Second', Foo)]
def __init__(self):
super(Foo2, self).__init__(var=0)

当我尝试执行以下操作时:

b = Foo2()
b.var = 0xff
print(hex(b.var))
b.First.var = 0
b.Second.var = 1
print(b.First.var)
print(b.Second.var)

我只能访问和修改继承的 var,但不能访问和修改 Foo 对象 First 和 Second 的 var,因为结果始终为 None。我错过了什么?

任何帮助真的非常感谢! 谢谢

我也有这个问题。 这很奇怪,我认为 ctypes 正在对结构类做一些"非标准"的事情。 我能够解决使用这样的东西提出的问题:

@property
def var(self):
return (self.address * 2)

在我可以从自我领域计算我的 var 的情况下。 也许字段就像插槽,据说限制了新属性的创建。

最新更新