2009-10-20 16 views
7

Ejemplo:Python: ¿Obtener el nombre de la clase instanciando?

class Class1: 
    def __init__(self): 
     self.x = Class2('Woo!') 

class Class2: 
    def __init__(self, word): 
     print word 

meow = Class1() 

¿Cómo derivar el nombre de la clase que crea la instancia self.x? En otras palabras, si me dieron la instancia self.x, ¿cómo obtengo el nombre 'Class1'? El uso de self.x.__class__.__name__ obviamente solo le dará el nombre de Class2. ¿Esto es posible? Gracias.

+1

'x' es una variable local, ¿cómo la está" recibiendo "? – SilentGhost

+1

En su ejemplo, 'x' es una variable local que solo existe temporalmente cuando se crea' miau '. Y 'x' ** es ** una instancia de' Class2'. ¿Que estas preguntando? Por favor, arregle su pregunta para que tenga sentido. –

+0

Esto fue simplemente un ejemplo usado para tratar de describir si había una función para lo que estaba tratando de hacer; no código real en uso. Puedo recuperar las instancias usando devoluciones de llamada. Sin embargo, nada de esto es realmente relevante para la pregunta. – Chuck

Respuesta

5

No puede, a menos que pase una instancia del 'creador' al constructor de Class2(). p.ej.

class Class1(object): 
    def __init__(self, *args, **kw): 
     self.x = Class2("Woo!", self) 

class Class2(object): 
    def __init__(self, word, creator, *args, **kw): 
     self._creator = creator 
     print word 

Esto crea una relación inversa entre las clases para usted

+0

Sí, tuve la sensación de que este era el caso, o eso o establecer un atributo. Gracias, esta es la respuesta que estaba buscando. – Chuck

+0

@Chuck: bueno, él es * * Ajuste de un atributo, por lo que cualquiera que no entendía su comentario o que no entendió la respuesta: P – MestreLion

1

Establezca una variable en la clase en cuestión en su método __init__() que luego recuperará.

Obtendrá mejores respuestas si realiza mejores preguntas. Este es bastante claro.

0

su pregunta es muy similar a here contestado. Tenga en cuenta que puede determinar quién creó la instancia en su constructor, pero no después. De todos modos, la mejor forma es pasar el creador al constructor de forma explícita.

+0

Gracias, eso ayuda. Sí, solo me preguntaba si me faltaba otra forma de hacerlo; aparte de pasarlo de alguna forma. – Chuck

Cuestiones relacionadas