Ich habe zwei Klassen. Wo die Elternklasse einige Standardwerte hat. Ich möchte, dass die Child-Klasse die init() -Methode der Parent-Klasse und auch die Standardwerte erbt.Standardwerte in Vererbungsklassen in Python
Wenn ich jedoch versuche, die Werte der optionalen Argumente zu ändern, kann ich es nicht tun. Zum Beispiel kann ich im folgenden Code den Wert year_born nicht ändern.
def get_current_age(x):
return 2017-x
get_age = get_current_age
class Parent():
def __init__(self,name,last_name, siblings=0, year_born=1900, age=get_age):
self.name = name
self.last_name = last_name
self.siblings = siblings
self.year_born=year_born
self._get_age = get_age(self.year_born)
class Child(Parent):
def __init__(self,name,last_name, siblings=0, year_born=1900, age=get_age):
super().__init__(name,last_name, siblings=0, year_born=1900, age=get_age)
self.lives_with_parent= True
self.stil_in_school= None
Wenn ich Instanzen der übergeordneten Klasse mit den Standardwerten zu erstellen, ist die Ausgabe ok. Wenn ich eine Child-Instanz mit einem anderen Wert für das Alter erstelle, wird immer noch der Standardwert verwendet.
Dad=Parent('Fyodr','Dosto')
print('Dad is' ,Dad._get_age)
kid = Child('Joseph','Dosto', year_born=2000)
print('Kid is' ,kid._get_age)
Dad is 117
Kid is 117
Ich weiß nicht, ob Sie irgendwelche anderen Ideen haben, wie Sie das beheben oder es auf eine bessere Weise schreiben können. Vielen Dank,
Nun, Sie genannt 'super() .__ init __ (stuff, year_born = 1900, ...)'. Was hast du erwartet?? – ForceBru
Dieser "Super" Anruf ist falsch. Es sollte 'super() sein .__ init __ (Name, Nachname, Geschwister, Jahr_Born, Alter)' –
Danke @ pm-2ring Das __init __ (Selbst, Name, Nachname, Geschwister = 0, Jahr_Born = 1900, Alter = get_age) des Kindes sollte die Standardwerte enthalten, , aber nicht super() .__ init___? – user3177938