2010-01-23 4 views
8

Die Ausgabe scheint ein wenig faul mit dem folgenden Code. Warum wird "in Base" nur einmal gedruckt? Und warum wird "in Base" überhaupt nicht gedruckt? Die tatsächliche Einstellung scheint jedoch gut zu funktionieren. Was vermisse ich?Python-Eigenschaft

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 

Ausgang:

get in Base 
BaseStr 
Foo 

Antwort

18

Sie müssen new-style classes verwenden Objekte korrekt arbeiten. Um dies zu tun leiten Sie Ihre Klasse von object:

class Base(object): 
    ... 
+1

Spot auf, danke. :) – Mizipzor

+0

Und für Python 3.x müssen Sie dies nicht tun. Alle Klassen in Python3 sind neuer Stil. – treecoder

+1

Aber wenn ich 'object' nicht ableiere, kann ich noch' property' in der classic class erstellen, warum ist das so? – Alcott

1

Jedes Mal, wenn eine neue Klasse erstellen, leiten sie aus dem object Typ.