2010-11-05 28 views
6

Python'da mülkün alıcısı üzerine nasıl yazıyorsunuz?Python kullanarak özelliklerin üzerine yaz

ben yapmaya çalıştım:

class Vehicule(object): 

    def _getSpatials(self): 
     pass 

    def _setSpatials(self, newSpatials): 
     pass 

    spatials = property(_getSpatials, _setSpatials) 

class Car(Vehicule) 

    def _getSpatials(self): 
     spatials = super(Car, self).spatials() 
     return spatials 

Ama alıcı değil Car VEHICULE yöntemini çağırıyor.

Neyi değiştirmeliyim?

+0

Bu sorun yerine süper 'arasında' Vehicule' kullanabilirsiniz eğer çok daha kolay olacaktır:

class Car(Vehicule): def __init__(self): super(Car,self).__init__() def _getSpatials(self): print("Calling Car's spatials getter") return super(Car,self).spatials def _setSpatials(self,value): print("Calling Car's spatials setter") super(Car,self).spatials=value spatials=property(_getSpatials,_setSpatials) v=Vehicule() c=Car() print(c.spatials) c.spatials = 10 AttributeError: 'super' object has no attribute 'spatials' 

Bunun yerine, hile super(Car,self)._setSpatials çağırmaktır (Araç, kendini) '. 'Süper' zorunluluk kullanımı mı? – unutbu

+0

Ne demek istiyorsun? Bana bir örnek verebilirmisin ? –

cevap

3

Size Car'ın mekansal tesisin alıcı VEHICULE en mekansal tesisin getter aramak istediğiniz gibi görünüyor. Sen Car'ın ayarlayıcı daha zordur içindeki diğer taraftan

class Vehicule(object): 
    def __init__(self): 
     self._spatials = 1 
    def _getSpatials(self): 
     print("Calling Vehicule's spatials getter") 
     return self._spatials 
    def _setSpatials(self,value): 
     print("Calling Vehicule's spatials setter")   
     self._spatials=value 
    spatials=property(_getSpatials,_setSpatials) 

class Car(Vehicule): 
    def __init__(self): 
     super(Car,self).__init__() 
    def _getSpatials(self): 
     print("Calling Car's spatials getter") 
     return super(Car,self).spatials 
    spatials=property(_getSpatials) 

v=Vehicule() 
c=Car() 
print(c.spatials) 
# Calling Car's spatials getter 
# Calling Vehicule's spatials getter 
# 1 

ile gelen VEHICULE en ayarlayıcı arayarak elde edebilirsiniz. yapmak için bariz şey çalışmaz:

class Car(Vehicule): 
    def __init__(self): 
     super(Car,self).__init__() 
    def _getSpatials(self): 
     print("Calling Car's spatials getter") 
     return super(Car,self).spatials 
    def _setSpatials(self,value): 
     print("Calling Car's spatials setter") 
     super(Car,self)._setSpatials(value) 
    spatials=property(_getSpatials,_setSpatials) 

v=Vehicule() 
c=Car() 
print(c.spatials) 
# Calling Car's spatials getter 
# Calling Vehicule's spatials getter 
# 1 
c.spatials = 10 
# Calling Car's spatials setter 
# Calling Vehicule's spatials setter 
print(c.spatials) 
# Calling Car's spatials getter 
# Calling Vehicule's spatials getter 
# 10 
+0

Google App Engine kullanıyorum, @ spatials.setter sözdizimini desteklemeyen Python 2.5 ile. –

+0

@Pierre: Oh, tamam, eski sözdizimini kullanmak için cevabımı değiştireceğim. – unutbu

+0

Teşekkürler unutbu. Ve eğer alıcıyı parametrede kullanmak istiyorsanız, aracınızdaki alıcınızın içindeki süper (Car, self)_ getSpatials (params) kullanabilirsiniz. –

İlgili konular