4

如果你不为方法__cmp__和定义你自己的会发生什么__str__

4

2 回答 2

6

如果没有定义 __cmp__()、__eq__() 或 __ne__() 操作,则通过对象标识(“地址”)比较类实例。

有关更多详细信息:请参阅Python 中的 object.__cmp__(self, other)。并且您可以获得更多参考Python 中的特殊(魔术)方法

于 2012-04-19T05:22:39.543 回答
6

如果没有__str__定义,您将获得带有内存地址的默认地址,例如<__main__.A object at 0x165aa90>.

如果未定义任何操作,则通过对象标识(即内存地址(文档__cmp__()))比较类实例。

例子:

>>> class A(object):
...   pass
... 
>>> a = A()
>>> b = A()
>>> str(a)
'<__main__.A object at 0x7fcb1df8acd0>'
>>> hex(id(a))
'0x7fcb1df8acd0'
>>> a < b
False
>>> a > b
True
>>> id(a), id(b)
(140510357925072, 140510357925008)
于 2012-04-19T05:24:34.783 回答