访问对象内存地址
当你在Python中调用 object.__repr__()
方法时,你会得到类似下面的内容:
<__main__.Test object at 0x2aba1c0cf890>
如果你重写了 __repr__()
方法,还有没有其他方法可以获取内存地址,而不是调用 super(Class, obj).__repr__()
然后用正则表达式把它提取出来呢?
12 个回答
64
只需使用
id(object)
87
你可以这样重新实现默认的表示方式:
def __repr__(self):
return '<%s.%s object at %s>' % (
self.__class__.__module__,
self.__class__.__name__,
hex(id(self))
)
262
Python手册对id()
的解释是:
返回一个对象的“身份”。这个身份是一个整数(或长整数),它在对象的整个生命周期内都是唯一且不变的。两个生命周期不重叠的对象可能会有相同的id()值。(实现说明:这实际上是对象的地址。)
所以在CPython中,这个值就是对象的地址。不过,其他Python解释器并没有这样的保证。
需要注意的是,如果你在写C扩展,你可以完全访问Python解释器的内部,包括直接访问对象的地址。