Ich habe den folgenden Code.
%Vor%Ich bekomme diesen Fehler:
%Vor% Warum wird die foo
-Methode nicht in Bar
übernommen?
BEARBEITEN: Es funktioniert gut, wenn du super anrufst, was auskommentiert ist.
Die doppelten Unterstrichattribute haben ihre Namen gemangelt basierend auf dem aktuellen / enthaltenden -Namespace. In der Funktion foo
ist der aktuelle Namespace Foo
. Wenn Python also nach self.__baz
sucht, sucht er tatsächlich nach self._Foo__baz
aufgrund des Namens-Mangling-Schemas. Da nirgendwo in Foo
tatsächlich ein __baz
-Attribut gesetzt wurde, hat die Klasse kein _Foo__baz
-Attribut (es hat ein _Bar__baz
-Attribut, da Sie self.__baz
in einer Methode innerhalb von Bar
gesetzt haben).
Natürlich, wie Sie vielleicht bemerkt haben, wenn Sie Foo.__init__(self)
in Baz.__init__
aufrufen (direkt oder über super
), wird das Problem verschwinden, weil Foo.__init__
sets __baz
(dh _Foo__baz
).
Tags und Links python inheritance oop