4

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

class Example:
    def printSelf(self):
        print self

object1 = Example()
object2 = Example()

object1.printSelf()
object2.printSelf()

我需要这个来打印:

object1
object2

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

有人知道我该怎么做吗?

4

3 回答 3

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>)

a, b,c只是允许我们访问同一个对象的引用,当一个对象有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'
于 2013-06-19T19:57:59.710 回答
4

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

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

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

于 2013-06-19T19:57:27.387 回答
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两次。如果你想看到幕后的东西——使用调试器。

于 2013-06-19T20:07:16.820 回答