【问题标题】:Python: __cmp__ and __str__?Python:__cmp__ 和 __str__?
【发布时间】:2012-04-19 05:18:16
【问题描述】:

如果您不为方法__cmp____str__ 定义自己的方法会怎样?

【问题讨论】:

    标签: python methods


    【解决方案1】:

    如果没有定义 __cmp__()、__eq__() 或 __ne__() 操作,class 实例按对象标识(“地址”)进行比较。

    更多详细信息:请参阅object.__cmp__(self, other) in Python。你可以得到更多的参考Special (magic) methods in Python

    【讨论】:

      【解决方案2】:

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

      如果没有定义__cmp__() 操作,类实例将通过对象标识进行比较,即内存地址(docs)。

      例子:

      >>> 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)
      

      【讨论】:

        相关资源