Python,内置id()的对象方法是什么?

时间:2013-04-22 17:50:22

标签: python built-in python-internals

在Python中:

  • len(a)可以替换为a.__len__()
  • str(a)repr(a)可以替换为a.__str__()a.__repr__()
  • ==__eq__+__add__等。

是否有类似的方法来获取id(a)?如果没有,是否有任何解决方法来获取python对象的唯一ID而不使用id()


编辑:其他问题:如果没有?有没有理由不定义__id__()

2 个答案:

答案 0 :(得分:4)

不,此行为无法更改。 id()用于获取“整数(或长整数),该对象在其生命周期内保证是唯一且常量的”source)。没有给出这个整数的其他特殊含义(在CPython中,它是存储对象的内存位置的地址,但在可移植的Python中不能依赖它。)

由于id()的返回值没有特殊含义,因此允许您返回其他值是没有意义的。

此外,虽然您可以保证id()将为自己的对象返回唯一的整数,但您可能不能满足全局唯一性约束,因为您的对象不可能知道所有其他生物。有可能(并且可能)您的一个特殊值与运行时中活动的另一个对象的标识冲突。这不是一个可接受的情况。

如果您需要一个具有某些特殊含义的返回值,那么您应该在适当的位置定义一个方法并从中返回一个有用的值。

答案 1 :(得分:0)

对象不知道它自己的名字(它可以有很多),更不用说它与之关联的任何唯一ID了。所以 - 总之 - 没有。 __len__和co。的原因。工作是它们已经绑定到对象 - 对象没有绑定到它的ID。