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

Why can't I modify superclass attribute's value with ctypes Structure?

我有两个 类 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 正在对结构 class 做一些“非标准”的事情。我能够使用这样的方法解决问题:

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

在我可以从 self 的 字段 计算我的 var 的情况下。也许 fields 就像 slots,并且据说限制了新属性的创建。