访问对象内存地址

新手上路,请多包涵

当你在 Python 中调用 object.__repr__() 方法时,你会得到类似这样的结果:

 <__main__.Test object at 0x2aba1c0cf890>

如果您重载 __repr__() ,除了调用 super(Class, obj).__repr__() 并将其正则表达式外,还有什么方法可以获取内存地址?

原文由 thr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 408
2 个回答

Python 手册 中有关于 id() 的说法:

返回一个对象的“身份”。这是一个整数(或长整数),保证在该对象的生命周期内是唯一且不变的。两个生命周期不重叠的对象可能具有相同的 id() 值。 (实施说明:这是对象的地址。)

所以在 CPython 中,这将是对象的地址。但是,任何其他 Python 解释器都没有这样的保证。

请注意,如果您正在编写 C 扩展,则您可以完全访问 Python 解释器的内部结构,包括直接访问对象的地址。

原文由 Nick Johnson 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以通过这种方式重新实现默认 repr:

 def __repr__(self):
    return '<%s.%s object at %s>' % (
        self.__class__.__module__,
        self.__class__.__name__,
        hex(id(self))
    )

原文由 Armin Ronacher 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题