Eine innere Klasse bietet keine besonderen Besonderheiten in Python. Es ist nur eine Eigenschaft des Klassenobjekts, die sich nicht von einer Integer- oder String-Eigenschaft unterscheidet. Ihr OuterClass/Innerclass Beispiel kann genau so geschrieben werden:
class OuterClass(): pass
class InnerClass(): pass
OuterClass.InnerClass= InnerClass
Innerclass kann nicht wissen, ob es in einer anderen Klasse deklariert wurde, denn das ist nur eine einfache variable Bindung. Die Magie, die gebundene Methoden über ihren Besitzer "selbst" informiert, trifft hier nicht zu.
Die innere Magie Magie in der Link John veröffentlicht ist ein interessanter Ansatz, aber ich würde es nicht so verwenden wie es ist. Es ist nicht die Klassen-Cache für jedes äußeren Objekt erstellt, so dass Sie eine neue Innerclass jedes Mal erhalten Sie outerinstance.InnerClass nennen:
>>> o= OuterClass()
>>> i= o.InnerClass()
>>> isinstance(i, o.InnerClass)
False # huh?
>>> o.InnerClass is o.InnerClass
False # oh, whoops...
auch so, wie es versucht, das Java-Verhalten macht äußeren Klassenvariablen zu replizieren verfügbar auf der inneren Klasse mit getattr/setattr ist sehr zweifelhaft, und unnötig wirklich (da die mehr Pythonic Weg wäre, i .__ äußere __. attr explizit zu nennen).
Was ist falsch mit Selbst .__ Klasse __.__ Name__? Welchen Zweck haben Sie für diese Information? –
@ S.Lott: was meinst du mit "was ist los mit selbst .__ class __.__ name__"? Sorry, ich verstehe deine Frage nicht ... –
@orsogufo: Was ist "falsch" - funktioniert nicht - ist nicht angemessen - hilft nicht - ist kaputt - tut nicht was Sie wollen - ist nicht im richtigen Format - "falsch" mit Selbst .__ Klasse __.__ Name__? Da stimmt etwas nicht, aber ich weiß nicht, was du nicht magst. Bitte klären Sie. –