2012-04-08 7 views
20

Ich versuche, auf eine übergeordnete Elementvariable von einer erweiterten Klasse zuzugreifen. Aber der folgende Code ausgeführt ...Zugriff auf die übergeordnete Elementvariable in Python nicht möglich

class Mother(object): 
    def __init__(self): 
     self._haircolor = "Brown" 

class Child(Mother): 
    def __init__(self): 
     Mother.__init__(self) 
    def print_haircolor(self): 
     print Mother._haircolor 

c = Child() 
c.print_haircolor() 

Ruft mir dieser Fehler:

AttributeError: type object 'Mother' has no attribute '_haircolor' 

Was mache ich falsch?

Antwort

27

Sie mischen Klassen- und Instanzattribute.

+10

thanks- ein Idiot im, – Yarin

19

Sie möchten das Instanzattribut, nicht das Klassenattribut, also sollten Sie self._haircolor verwenden.

Auch sollten Sie wirklich super in der __init__ verwenden, falls Sie sich entscheiden, Ihre Vererbung zu Father oder etwas zu ändern.

class Child(Mother): 
    def __init__(self): 
     super(Child, self).__init__() 
    def print_haircolor(self): 
     print self._haircolor 
+0

mVChr- du hast recht should- ich dank – Yarin

+1

Was 'super()' s Verhalten ist, wenn sie mit Mehrfachvererbung konfrontiert? Tritt der übliche MRO ein? –

+1

http://stackoverflow.com/questions/3277367/how-does-pythons-super-work-with-multiple-heritance – mVChr

Verwandte Themen