Python objekt @property

hlasů
6

Snažím se vytvořit třídu bod, který definuje vlastnost nazvanou „koordinovat“. Nicméně, není to chová jako bych očekávat, a nemohu přijít na to proč.

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)

Zdá se, že px a py nejsou stále nastaveny z nějakého důvodu, a to i přesto, že seřizovač „má“ nastavit tyto hodnoty. Ví někdo, proč tomu tak je?

Položena 26/08/2009 v 23:39
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
9

propertyMetoda (a potažmo @propertynatěrač) vyžaduje třídu nového stylu tj třídu, která podtřídy object.

Například,

class Point:

mělo by

class Point(object):

Také setterbyl přidán atribut (spolu s ostatními) v Python 2.6.

Odpovězeno 26/08/2009 v 23:47
zdroj uživatelem

hlasů
4

To bude fungovat, pokud pocházejí Point od objektu:

class Point(object):
    # ...
Odpovězeno 26/08/2009 v 23:47
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more