Python对象@属性
我试图创建一个point类,它定义了一个名为“坐标”的属性。然而,它的行为不像我预期的那样,我也不明白为什么Python对象@属性,python,new-style-class,Python,New Style Class,我试图创建一个point类,它定义了一个名为“坐标”的属性。然而,它的行为不像我预期的那样,我也不明白为什么 class Point: def __init__(self, coord=None): self.x = coord[0] self.y = coord[1] @property def coordinate(self): return (self.x, self.y) @coordinate.sett
class Point:
def __init__(self, coord=None):
self.x = coord[0]
self.y = coord[1]
@property
def coordinate(self):
return (self.x, self.y)
@coordinate.setter
def coordinate(self, value):
self.x = value[0]
self.y = value[1]
p = Point((0,0))
p.coordinate = (1,2)
>>> p.x
0
>>> p.y
0
>>> p.coordinate
(1, 2)
似乎p.x和p.y由于某种原因没有被设置,即使设置程序“应该”设置这些值。有人知道这是为什么吗 property方法(扩展为
@property
装饰器),即对对象
进行子类化的类
比如说,
class Point:
应该是
class Point(object):
另外,Python 2.6中添加了
setter
属性(以及其他属性)。如果从对象派生点,则该属性将起作用:
class Point(object):
# ...
如果在实例化对象之后,在尝试更改对象之前,尝试打印
p.coordinate
,会发生什么情况?这是一个旧样式类与新样式类的对比,您可能希望property()
或IDE会捕获它。可能重复,但如果我在经典类中创建属性
,出现错误?