关于python:如何从类中获取对象名?

How to get the object name from within the class?

本问题已经有最佳答案,请猛点这里访问。

我有一个简单的类,从中创建两个对象。现在我想从类中打印对象的名称。所以像这样:

1
2
3
4
5
6
7
8
9
class Example:
    def printSelf(self):
        print self

object1 = Example()
object2 = Example()

object1.printSelf()
object2.printSelf()

我需要这个打印:

1
2
object1
object2

不幸的是,这只是打印

有人知道我怎么做吗?


object1只是一个指向实例对象的标识符(或变量),对象没有名称。

1
2
3
4
5
6
7
8
9
>>> 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只是允许我们访问同一对象的引用,当一个对象有0个引用时,它会自动被垃圾收集。

创建实例时,快速黑客将传递名称:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> 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'


对象没有"名称"。引用对象的变量不是对象的"名称"。对象不知道引用它的任何变量,尤其是因为变量不是语言的第一类主题。

如果要更改对象打印方式,请重写__repr____unicode__

如果这是出于调试目的,请使用调试器。这就是它的目的。


实现这一点的常见方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
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

印刷品:

1
2
object1
object2

但是,不能保证此对象仍然绑定到原始名称:

1
2
3
4
5
object1 = Example('object1')
object2 = object1

print object1
print object2

按预期打印两次object1。如果你想在引擎盖下看到东西——使用一个调试器。