class Bar:
pass
class Foo:
def __str__(self): return "Foo instance"
>> aBar = Bar()
>> print aBar
<__main__.Bar instance at 0x100572a28>
>> aFoo = Foo()
>> print aFoo
Foo instance
有没有办法在重写str方法后打印出aFoo的地址?
使用
>>repr(aFoo)
解决了我的问题
最佳答案
至少在cpython中,id
提供地址。但输出是十进制的;你必须将其转换为十六进制:
>>> f = (x for x in [1,2,3])
>>> print f
<generator object <genexpr> at 0x1004d22d0>
>>> '%x' % id(f)
'1004d22d0'
实际上,__repr__
当 __str__
时,功能不会改变被覆盖。所以你也可以这样做:
>>> class Foo:
... def __str__(self): return "Foo instance"
...
>>> a = Foo()
>>> print a
Foo instance
>>> print repr(a)
<__main__.Foo instance at 0x1004d1c68>
我认为id
如果您想要的确实是 id
,则更可取。但是id
不保证返回地址;这只是 cpython 的实现。不知道是否指定内置__repr__
对象必须返回一个地址,或者是否必须返回id
,或两者都不是。因此,如果您特别想要任何东西,那么__repr__
提供,那么这可能是要走的路。
更新:答案都不是,至少根据language reference ,这仅规定 __repr__
一个对象的“信息丰富且明确”。事实上,有时 __repr__
实际上并不返回相关特定对象的地址,如下所示:
>>> a = Foo()
>>> '%x' % id(a)
'1004d1fc8'
>>> '%x' % id(a.__str__)
'1004745a0'
>>> '%x' % id(Foo.__str__)
'1004745a0'
>>> repr(a.__str__)
'<bound method Foo.__str__ of <__main__.Foo instance at 0x1004d1fc8>>'
关于python - python 中重写 __str__ 方法后如何获取实例的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6219446/