Una clase interna no ofrece características especiales particulares en Python. Es solo una propiedad del objeto de clase, no diferente de un entero o propiedad de cadena. Su ejemplo OuterClass/InnerClass se puede reescribir exactamente como:
class OuterClass(): pass
class InnerClass(): pass
OuterClass.InnerClass= InnerClass
InnerClass no puede saber si se declara dentro de otra clase, porque eso es sólo una variable de unión simple. La magia que hace que los métodos enlazados sepan sobre su propio "dueño" no se aplica aquí.
La magia del decorador de la clase interior en el enlace publicado por John es un enfoque interesante, pero yo no lo usaría tal como está. No almacena en caché las clases que crea para cada objeto exterior, por lo que obtener una nueva InnerClass cada vez que llame outerinstance.InnerClass:
>>> o= OuterClass()
>>> i= o.InnerClass()
>>> isinstance(i, o.InnerClass)
False # huh?
>>> o.InnerClass is o.InnerClass
False # oh, whoops...
también la forma en que trata de replicar el comportamiento de Java de hacer las variables de clase exteriores disponible en la clase interna con getattr/setattr es muy dudoso, y realmente innecesario (ya que la manera más pitonica sería llamar i .__ outer __. attr explícitamente).
¿Qué le pasa a sí mismo .__ class __.__ name__? ¿Qué propósito tienes para esta información? –
@ S.Lott: ¿qué quieres decir con "¿qué pasa con uno mismo .__ clase __.__ nombre__"? Lo siento, no entiendo tu pregunta ... –
@orsogufo: Lo que está "mal" - no funciona - no es apropiado - no ayuda - está roto - no hace qué usted quiere - no está en el formato correcto - "mal" con uno mismo .__ clase __.__ nombre__? Algo no está bien con eso, pero no sé lo que no te gusta. Por favor aclara –