1

以这个简单的示例类为例:

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,那么更改后的属性值是从哪里来的?

4

1 回答 1

1

你应该使用新式的类。而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

根据property文件

返回新式类(派生自对象的类)的属性属性。

如果您不使用新样式类,请a.x = ...创建一个新属性x而不是调用 setter。

于 2013-11-14T07:16:00.057 回答