在Python中:
len(a)
可以替换为a.__len__()
str(a)
或repr(a)
可以替换为a.__str__()
或a.__repr__()
==
为__eq__
,+
为__add__
等。是否有类似的方法来获取id(a)
?如果没有,是否有任何解决方法来获取python对象的唯一ID而不使用id()
?
编辑:其他问题:如果没有?有没有理由不定义__id__()
?
答案 0 :(得分:4)
不,此行为无法更改。 id()
用于获取“整数(或长整数),该对象在其生命周期内保证是唯一且常量的”(source)。没有给出这个整数的其他特殊含义(在CPython中,它是存储对象的内存位置的地址,但在可移植的Python中不能依赖它。)
由于id()
的返回值没有特殊含义,因此允许您返回其他值是没有意义的。
此外,虽然您可以保证id()
将为自己的对象返回唯一的整数,但您可能不能满足全局唯一性约束,因为您的对象不可能知道所有其他生物。有可能(并且可能)您的一个特殊值与运行时中活动的另一个对象的标识冲突。这不是一个可接受的情况。
如果您需要一个具有某些特殊含义的返回值,那么您应该在适当的位置定义一个方法并从中返回一个有用的值。
答案 1 :(得分:0)
对象不知道它自己的名字(它可以有很多),更不用说它与之关联的任何唯一ID了。所以 - 总之 - 没有。 __len__
和co。的原因。工作是它们已经绑定到对象 - 对象没有绑定到它的ID。