为什么我不能用 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,并且据说限制了新属性的创建。
我有两个 类 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,并且据说限制了新属性的创建。