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__
или что мне не хватает?
Ответы
Ответ 1
Документация немного вводит в заблуждение. Чтобы получить полную информацию, вы должны прочитать __cmp__
, а именно эту часть:
Если не определена операция __cmp__()
, __eq__()
или __ne__()
, экземпляры экземпляров сравниваются по идентификатору объекта ( "адрес" ).
Итак, по умолчанию вы не получаете метод __cmp__
по умолчанию, но экземпляры пользовательских классов можно сравнить с другими объектами; если экземпляр не имеет метода __cmp__
, вместо него будет использоваться идентификатор объекта (определяемый id(obj)
, который обычно является адресом памяти объекта).