Python:如何获取对象';在_repr__方法中的地址?

Python:如何获取对象';在_repr__方法中的地址?,python,Python,与默认的\uuu repr\uuu工作方式类似,如何获取要包含在对象表示中的对象地址 >>> a=object() >>> a <object object at 0x1002c8090> class Foo(object): def __repr__(self): return '<my stuff, at '+obj_address+'>' # how do I get object address? >

与默认的
\uuu repr\uuu
工作方式类似,如何获取要包含在对象表示中的对象地址

>>> a=object()
>>> a
<object object at 0x1002c8090>

class Foo(object):
    def __repr__(self):
        return '<my stuff, at '+obj_address+'>' # how do I get object address?
>a=object()
>>>a
类Foo(对象):
定义报告(自我):
返回“”#如何获取对象地址?
类Foo(对象):
定义报告(自我):
返回“”%id(自)

地址是对象的十六进制ID:

>>> o = object()
>>> repr(o)
'<object object at 0x1028ed080>'
>>> id(o)
4337881216
>>> hex(id(o))
'0x1028ed080'
>o=object()
>>>报告员(o)
''
>>>id(o)
4337881216
>>>十六进制(id(o))
“0x1028ed080”

挑剔:按照惯例,如果
repr
结果不是有效的python语法(但不要求非
repr
可以
eval
的话,就用
结果来包围它)。@o11c,谢谢,我没有意识到这一点。更新。使用
return'我的东西可能更为传统,在0x%08x'%id(self)
@martineau我想这取决于你运行的是32位还是64位python,但我不认为默认的
\urepr\uuuu
将前导零放在任何地方实际上32位版本是用零填充的,我只是从中得到了一个
。不管怎样,我是指传统的内存地址显示方式。解释器的位可以通过sys.maxsize来确定,因此格式字符串可以自动调整。@martineau odd,我不确定,因为在我的32位版本中,我得到了
,并且@MarkHarrison和@wilcoley似乎都有9个字符,所以我不知道。更准确地说,对象的
id()
“保证此对象在其生存期内唯一且恒定的整数”。在CPython引用实现中,它恰好是地址,但不必是地址。
>>> o = object()
>>> repr(o)
'<object object at 0x1028ed080>'
>>> id(o)
4337881216
>>> hex(id(o))
'0x1028ed080'