2009-10-20 587 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 2009-10-20 10:14:22

+1

在你的例子中'x'是一個局部變量,只有當'meow'創建時才暫時存在。而'x' **是'Class2'的一個實例。你在問什麼?請修正您的問題,使其有意義。 – 2009-10-20 10:21:28

+0

這只是一個簡單的例子,用來描述是否有我想要做的功能;沒有使用實際的代碼。我能夠使用回調來檢索實例。但是,這並不是真的與這個問題有關。 – Chuck 2009-10-20 10:28:18

回答

5

除非將'creator'的實例傳遞給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 2009-10-20 10:29:25

+0

@Chuck:好的,他*是*設置屬性,所以要麼我不理解您的評論,要麼您不明白答案:P – MestreLion 2012-04-26 09:11:21

1

在您的__init__()方法中,在有問題的類上設置一個變量,稍後再檢索該方法。

如果您提出更好的問題,您會得到更好的答案。這個很不清楚。

0

你的問題的類之間的反向鏈接是非常相似的回答here。請注意,您可以確定誰在其構造函數中創建了實例,但之後沒有。無論如何,最好的方法是將創建者明確地傳遞給構造函數。

+0

謝謝,這有幫助。是的,只是想知道我是否想以其他方式去做;除了以某種形式傳遞它。 – Chuck 2009-10-20 10:40:09