Ja, Dunder Methoden ganz gut geerbt. Aus der Antwort gibt, verknüpft die Dokumentation ist Reserved classes of identifiers:
__*__
Vom System definierte Namen. Diese Namen werden vom Interpreter und seiner Implementierung (einschließlich der Standardbibliothek) definiert. Aktuelle Systemnamen werden im Abschnitt Spezielle Methodennamen und an anderer Stelle erläutert. Mehr wird wahrscheinlich in zukünftigen Versionen von Python definiert werden. Beliebig Verwendung von __*__
Namen, in jedem Zusammenhang, die nicht explizit dokumentierte Verwendung folgt, ist Bruch ohne Warnung.
die eine separate Klasse ist von __*
privaten Klassen Namen.
und die anderen verknüpften Abschnitt ist Identifiers (Names) die vielleicht deutlicher noch:
Wenn eine Kennung, die in einer Klassendefinition erfolgt textuell mit zwei oder mehr Streichungszeichen beginnt und endet nicht in zwei oder mehr Unterstrichen, wird es als privater Name dieser Klasse betrachtet.
Fett Hervorhebung meins; Namen, die mit zwei Unterstrichen beginnen und mit zwei Unterstrichen enden, sind nicht class-private Namen.
Beachten Sie, dass beide Klassen von Namen vererbt werden (Vererbung funktioniert durch Nachschlagen von Attributnamen in der MRO der Klasse). Dass die Namen verstümmelt sind, verhindert nicht, dass sie vererbt werden, was ist, warum die Namen an erster Stelle verstümmelt werden. Durch Voranstellen solcher Namen mit _ClassName
Unterklassen können Sie den Namen erneut verwenden und nicht automatisch kollidieren, da diese ihr eigenes _SubClass
Präfix erhalten.
@ MSeifert class-private Namen (d. H. '__ *') werden neu geschrieben, um ein beschädigtes Formular zu verwenden, um Namenskonflikte zwischen "privaten" Attributen von Basis- und abgeleiteten Klassen zu vermeiden. Ich bin mir nicht sicher, ob Dunder-Dunder-Methoden in dieses Boot fallen. – BoltzmannBrain
Nein, das tun sie nicht - weil sie nicht als "private attributes" (diese sind definiert als "mindestens zwei führende Unterstriche, höchstens ein abschließender Unterstrich") definiert sind: siehe https://docs.python.org/2 /tutorial/classes.html#private-variables-and-class-local-references – MSeifert