Подтвердить что ты не робот

Python. По умолчанию пользовательские классы имеют методы __cmp __() и __hash __()? Или?

В python docs (да, у меня есть эта вещь с документами) говорится, что:

Пользовательские классы по умолчанию имеют методы __cmp__() и __hash__(); с ними все объекты сравниваются неравномерно (кроме самих себя) и x.__hash__() возвращает id(x).

Но следующий код показывает другую вещь:

>>> class Test(object): pass
...
>>> t = Test()
>>>
>>> t.__hash__
<method-wrapper '__hash__' of Test object at 0x01F2B5D0>
>>>
>>> t.__cmp__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Test' object has no attribute '__cmp__'
>>>

Итак, где __cmp__ или что мне не хватает?

4b9b3361

Ответ 1

Документация немного вводит в заблуждение. Чтобы получить полную информацию, вы должны прочитать __cmp__, а именно эту часть:

Если не определена операция __cmp__(), __eq__() или __ne__(), экземпляры экземпляров сравниваются по идентификатору объекта ( "адрес" ).

Итак, по умолчанию вы не получаете метод __cmp__ по умолчанию, но экземпляры пользовательских классов можно сравнить с другими объектами; если экземпляр не имеет метода __cmp__, вместо него будет использоваться идентификатор объекта (определяемый id(obj), который обычно является адресом памяти объекта).