Bei der Erstellung einer einfachen Objekthierarchie in Python möchte ich die Methoden der übergeordneten Klasse von einer abgeleiteten Klasse aus aufrufen können. In Perl und Java gibt es dafür ein Schlüsselwort ( super
). In Perl könnte ich dies tun:
package Foo;
sub frotz {
return "Bamf";
}
package Bar;
@ISA = qw(Foo);
sub frotz {
my $str = SUPER::frotz();
return uc($str);
}
In Python scheint es, dass ich die übergeordnete Klasse explizit nach der untergeordneten benennen muss. In dem obigen Beispiel müsste ich etwas tun wie Foo::frotz()
.
Dies scheint nicht richtig zu sein, da dieses Verhalten es schwierig macht, tiefe Hierarchien zu erstellen. Wenn Kinder wissen müssen, welche Klasse eine geerbte Methode definiert hat, entstehen alle Arten von Informationsschmerzen.
Ist dies eine tatsächliche Einschränkung in Python, eine Lücke in meinem Verständnis oder beides?
3 Stimmen
Ich denke, dass die Benennung der übergeordneten Klasse keine so schlechte Idee ist. Es kann hilfreich sein, wenn die Kindklasse von mehr als einer Elternklasse erbt, da Sie die Elternklasse explizit benennen.
8 Stimmen
Die Möglichkeit, eine Klasse zu benennen, ist zwar keine schlechte Idee, aber dazu gezwungen zu werden, ist es schon.
0 Stimmen
Beachten Sie die Änderungen in der Superbehandlung zwischen Python 2 und Python 3 https://www.python.org/dev/peps/pep-3135/ . Die Benennung der Klasse ist nicht mehr erforderlich (obwohl sie zumindest manchmal immer noch eine gute Idee sein kann).