2009-08-26 20 views
6

"Koordinat" adı verilen özelliği tanımlayan bir nokta sınıfı oluşturmaya çalışıyorum. Ancak, beklediğim gibi davranmıyor ve nedenini anlayamıyorum.Python object @property

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) 

ayarlayıcı bu değerleri ayarlamak "gerektiği" olsa bile, o p.x ve p.y nedense ayarlanmış sakın görünüyor. Bunun neden olduğunu bilen var mı? object alt sınıfların

+0

Python 2.6+ kullanıyor musunuz? –

+0

Nesneyi başlattıktan hemen sonra, değiştirmeye çalışmadan önce 'p.coordinate' yazdırmaya çalışırsanız ne olur? –

+0

Bu, eski stil-sınıflar-yeni-stil-sınıfları bir gotcha var ve 'ya()' veya IDE onu yakalayacağını bekleyebilirsiniz. – smci

cevap

9

property yöntemi (ve dolayısıyla, @property dekoratör) requires a new-style class yani sınıfı.

class Point: 

da

class Point(object): 

olmalıdır Örneğin

, (diğerleri ile birlikte) setter özelliği Python 2.6 ilave edildi.

+0

Ama klasik bir sınıf içinde bir 'özellik 'oluşturursam, hata mı ortaya çıktı? – Alcott

4

Eğer nesneden Noktası türetmek eğer çalışacaktır:

class Point(object): 
    # ... 
İlgili konular