2017-01-07 8 views
1

Ich habe einige Eltern und Klassen in Python 3 mit einigen Attributen, eine dieser Attribute ist die Summe zwischen den anderen.Get Attribute von einer Elternklasse von Kind in Python 3

Geordnete Klasse:

class Parent: 
    ATRIBUTE1 = 'dad' 
    ATRIBUTE2 = ' good' 
    ATRIBUTE3 = ATRIBUTE1 + ATRIBUTE2 

Kinderklasse:

class Child(Parent): 
    ATRIBUTE1 = 'son' 
    ATRIBUTE2 = ' bad' 

Ich will nur mit den gleichen Eigenschaften der ATRIBUTE3 in der Child-Klasse erben.

Erwarteter Ausgang:

>> parent.ATRIBUTE3 
'dad good' 

>> child.ATRIBUTE3 
'son bad' 

Antwort

2

Sie benötigen eine Eigenschaft.

class Parent: 
    ATRIBUTE1 = 'dad' 
    ATRIBUTE2 = ' good' 

    @property 
    def attribute3(self): 
     return self.ATRIBUTE1 + self.ATRIBUTE2 

Jetzt parent.attribute3 und child.attribute3 werden Sie das gewünschte Ergebnis.

+1

Aber es könnte NICHT als Klassenvariable aufgerufen werden, zB als 'Child.attribute3' –

+0

Vielen Dank! Das funktioniert! – Gui

1

ATTRIBUTE3 wird zum Zeitpunkt der Klassenerstellung ausgewertet und nicht bei jedem Zugriff neu berechnet. Daher erben Sie den Wert des Elterns, nicht die Formel.

Wenn Sie Wert wünschen bei jedem Zugriff neu berechnet Attribut können Sie @property verwenden:

class Parent: 
    ATRIBUTE1 = 'dad' 
    ATRIBUTE2 = ' good' 

    @property 
    def ATRIBUTE3(self): 
     return self.ATRIBUTE1 + self.ATRIBUTE2 

Und Sie können es auf die gleiche Weise wie zuvor zugreifen (wenn auch nur lesen):

print(child.ATTRIBUTE3)