以这个简单的示例类为例:
class vec:
def __init__(self,v=(0,0,0,0)):
self.v = list(v)
@property
def x(self):
return self.v[0]
@x.setter
def set_x(self, val):
self.v[0] = val
...以及这个用法:
>> a = vec([1,2,3,4])
>> a.v
[1,2,3,4]
>> a.x
1
>> a.x = 55
>> a.x
55
>> a.v
[1,2,3,4]
为什么成员数组(具体来说,self.v[0]
)和报告的属性值不一致?如果它不在 self.v
中,那么更改后的属性值来自哪里?
最佳答案
您应该使用新式类。并且 setter 的名称应该是 x
,而不是 set_x
。
class vec(object): # <-----
def __init__(self,v=(0,0,0,0)):
self.v = list(v)
@property
def x(self):
return self.v[0]
@x.setter
def x(self, val): # <--------
self.v[0] = val
Return a property attribute for new-style classes (classes that derive from object).
如果您不使用新式类,a.x = ...
会创建一个新属性 x
,而不是调用 setter。
关于python - 为什么属性包装的成员列表显示意外的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19971646/