2009-10-20 1 views
7

Пример:Python: получить имя класса создания экземпляров?

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

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

meow = Class1() 

Как получить имя класса, который создал self.x экземпляр? Другими словами, если мне был предоставлен экземпляр self.x, как мне получить имя «Class1»? Использование self.x.__class__.__name__, очевидно, даст вам имя Class2. Возможно ли это? Благодарю.

+1

'x' - локальная переменная, как вы ее получаете? – SilentGhost

+1

В вашем примере 'x' является локальной переменной, которая существует только временно, когда создается' meow'. И 'x' ** является ** экземпляром' Class2'. Что ты спрашиваешь? Пожалуйста, исправьте свой вопрос, чтобы он имел смысл. –

+0

Это был просто пример, используемый, чтобы попытаться описать, была ли функция для того, что я пытался сделать; а не фактический используемый код. Я могу получить экземпляры, используя обратные вызовы. Однако ничто из этого не имеет отношения к вопросу. – Chuck

ответ

5

Вы не можете, если вы не передадите экземпляр «создателя» в конструктор Class2(). например

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 

Это создает обратную связь между классами для вас

+0

Да, у меня было ощущение, что это так, либо это, либо установка атрибута. Спасибо, это ответ, который я искал. – Chuck

+0

@Chuck: ну, он * устанавливает * атрибут, так что либо я не понял ваш комментарий, либо вы не поняли ответ: P – MestreLion

1

Задайте переменную класса, о которой идет речь, в методе __init__(), который затем извлекается позже.

Если вы зададите более качественные вопросы, вы получите ответы. Это довольно непонятно.

0

Вашего вопроса очень похоже на here ответили. Обратите внимание, что вы можете определить, кто создал экземпляр в своем конструкторе, но не потом. Во всяком случае, лучший способ - явно передать создателю в конструктор.

+0

Спасибо, это помогает. Да, было просто интересно, не хватает ли я другого способа сделать это; кроме передачи его в той или иной форме. – Chuck