2013-02-05 33 views
0

可能重複:
Getting an instance name inside class __init__()如何獲取實例類的變量名?

我試圖解決這個問題:

class Test(object): 
    def __init__(self): 
     print "hello: %s" % i_dont_know 

b = Test() 
c = Test() 

我想獲得的結果:

hello: b 
hello: c 

只是的變量名稱。

我知道id(self)返回參考碼,有可能獲得參考名稱?

+0

我覺得瓦爾是你在找什麼,,我會後的答案,如果我的代碼工作的權利 – Hamoudaq

+0

檢查了這一點http://stackoverflow.com/問題/ 1538342 /如何獲得python中的對象名稱 – TankorSmash

+2

這是不可能的,而且這是一個錯誤的問題。做到這一點,你不需要它。 – delnan

回答

1

不,你不能。如果我這樣做:

Test() 

或本:

someList[3] = Test() 

或本:

someList.append(Test()) 
+0

另一個:'a = b = c = Test()' –

+0

或'a =測試(); b = a; somelist [3] = b; somedict [a] = set([a]); someobject.nested.attribute = a; del a'? – Ben

+0

我知道這種可能性,我只是考慮檢查一下全局變量,或者是當地人來快速的做我想做的事。 –

1

你就是不行。除了BrenBarn的例子之外,還有另一個不可能解釋的原因。在之前,構造函數完全執行

看字節碼:

>>> class Test(object): pass 
... 
>>> def make_instances(): 
...  a = Test() 
...  b = Test() 
... 
>>> import dis 
>>> dis.dis(make_instances) 
    2   0 LOAD_GLOBAL    0 (Test) 
       3 CALL_FUNCTION   0 
       6 STORE_FAST    0 (a) 

    3   9 LOAD_GLOBAL    0 (Test) 
      12 CALL_FUNCTION   0 
      15 STORE_FAST    1 (b) 
      18 LOAD_CONST    0 (None) 
      21 RETURN_VALUE 

CALL_FUNCTION字節碼是執行__init__之一。 STORE_FAST將對象綁定到標識符。 Python沒有提供任何與綁定進行交互的方式,所以沒有可以使用的「特殊方法」。

+0

對我來說是完美的答案。 –

1

這可能是最好做的是這樣

class Test: 
    def __init__(name): 
     self.name = name 


    def __str__(): 
     return name 


a = Test("a") 

print a  
>>> a