2013-06-19 45 views
4

我有一個簡單的類,我創建了兩個對象。我現在想要在類中打印對象的名稱。因此,像這樣:如何從類內部獲取對象名稱?

class Example: 
    def printSelf(self): 
     print self 

object1 = Example() 
object2 = Example() 

object1.printSelf() 
object2.printSelf() 

我需要這個打印:

object1 
object2 

可惜這只是打印<myModule.Example instance at 0xb67e77cc>

有誰知道我能做到這一點?

+0

通過對象的名稱,你的意思是 - 引用的名稱(object1,object2,...)?? –

+0

是的。不好意思,我會就此編輯我的問題。 – kramer65

回答

5

object1只是指向實例對象的標識符(或變量),對象沒有名稱。

>>> class A: 
...  def foo(self): 
...   print self 
...   
>>> a = A() 
>>> b = a 
>>> c = b  
>>> a,b,c #all of them point to the same instance object 
(<__main__.A instance at 0xb61ee8ec>, <__main__.A instance at 0xb61ee8ec>, <__main__.A instance at 0xb61ee8ec>) 

abc是簡單的引用,使我們能夠訪問相同的對象,當一個對象具有引用,它會自動進行垃圾回收。

快速黑客會通過創建實例時名:

>>> class A: 
...  def __init__(self, name): 
...   self.name = name 
...   
>>> a = A('a') 
>>> a.name 
'a' 
>>> foo = A('foo') 
>>> foo.name 
'foo' 
>>> bar = foo # additional references to an object will still return the original name 
>>> bar.name 
'foo' 
+1

這是否意味着我想要做的事是不可能的? – kramer65

+0

@ kramer65是的,你不能在python中獲得變量名。它們只是訪問對象的引用。 –

+1

我認爲你的意思是物體沒有名字;一個變量由一個名稱和一個值組成(儘管說Python具有綁定到對象的標識符而不是表示它具有變量)更爲正確。 – chepner

4

該對象沒有「名稱」。引用該對象的變量不是該對象的「名稱」。該對象無法知道任何引用它的變量,至少因爲變量不是該語言的第一類主題。

如果您希望改變對象打印的方式,請覆蓋__repr____unicode__

如果這是出於調試目的,請使用調試器。這就是它的目的。

1

做到這一點的常用方法是沿着這些路線的東西:

class Example(object): 
    def __init__(self,name): 
     self.name=name 

    def __str__(self): 
     return self.name  

object1 = Example('object1') 
object2 = Example('object2') 

print object1 
print object2 

打印:

object1 
object2 

但是,不能保證此對象仍然綁定到原始名稱:

object1 = Example('object1') 
object2 = object1 

print object1 
print object2 

打印object1,如預期,兩次。如果你想看到底下的東西 - 使用調試器。