Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python对象@属性_Python_New Style Class - Fatal编程技术网

Python对象@属性

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

我试图创建一个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.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会捕获它。可能重复,但如果我在经典类中创建
属性
,出现错误?