2010-01-23 19 views
8

Aşağıdaki kod göz önüne alındığında çıktı biraz balık gibi görünüyor. Neden "üste gir" sadece bir kez basılır? Ve neden "Basılı olarak ayarlanmış" hiç yazdırılmıyor? Gerçek alma/ayarlama olsa iyi çalışıyor gibi görünüyor. Neyi kaçırıyorum?Python özelliği

class Base: 
    def __init__(self): 
     self.s = "BaseStr" 

    def getstr(self): 
     print "get in Base" 
     return self.s 
    def setstr(self, s): 
     print "set in Base" 
     self.s = s 
    str = property(getstr, setstr) 

b = Base() 
print b.str 
b.str = "Foo" 
print b.str 

Çıktı:

özellikleri düzgün çalışması için Sen new-style classes kullanmak gerekir
get in Base 
BaseStr 
Foo 

cevap

18

. böylece object adresinin sınıfı türetmek do için:

class Base(object): 
    ... 
+1

Üzerinde durun, teşekkürler. :) – Mizipzor

+0

Ve Python 3.x için bunu yapmanız gerekmez. Python3'teki tüm sınıflar yeni bir stil. – treecoder

+1

Ama eğer 'nesne' alt sınıfını yapmazsam, yine de klasik sınıfta 'özellik' oluşturabilirim, neden bu? – Alcott

1

yeni bir sınıf oluşturarak zaman, object türünden türetmeye.

İlgili konular