如何从类中获取对象名称?

时间:2013-06-19 19:53:00

标签: python class object

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

class Example:
    def printSelf(self):
        print self

object1 = Example()
object2 = Example()

object1.printSelf()
object2.printSelf()

我需要打印:

object1
object2

不幸的是,这只是打印<myModule.Example instance at 0xb67e77cc>

有人知道我该怎么做吗?

3 个答案:

答案 0 :(得分: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只是允许我们访问同一对象的引用,当对象具有 0 引用时,它会自动进行垃圾回收

快速破解将在创建实例时传递名称:

>>> 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 :(得分:4)

该对象没有“名称”。引用对象的变量不是对象的“名称”。对象无法知道任何引用它的变量,尤其是因为变量不是该语言的一流主题。

如果您希望更改对象的打印方式,请覆盖__repr____unicode__

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

答案 2 :(得分: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两次。如果你想看看内幕的东西 - 使用调试器。