我有一个简单的类,我可以从中创建两个对象。我现在想要从类中打印对象的名称。所以像这样:
class Example:
def printSelf(self):
print self
object1 = Example()
object2 = Example()
object1.printSelf()
object2.printSelf()
我需要打印:
object1
object2
不幸的是,这只是打印<myModule.Example instance at 0xb67e77cc>
有人知道我该怎么做吗?
答案 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>)
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'
答案 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
两次。如果你想看看内幕的东西 - 使用调试器。