2012-10-15 6 views
13

In dem Python docs (yeah, I have this thing with the docs) es sagt, dass:Python - Benutzerdefinierte Klassen haben standardmäßig __cmp __() und __hash __() -Methoden? Oder?

Benutzerdefinierte Klassen __cmp__() und __hash__() Methoden haben standardmäßig; mit ihnen vergleichen alle Objekte ungleich (außer mit sich selbst) und x.__hash__() gibt id(x) zurück.

Aber der folgende Code zeigt eine andere Sache:

>>> 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__' 
>>> 

Also, wo ist __cmp__ oder was bin ich dabei?

Antwort

9

Die Dokumentation ist ein bisschen irreführend. Um die ganze Geschichte zu bekommen, müssen Sie lesen, auf __cmp__, nämlich diesen Teil:

Wenn kein __cmp__(), __eq__() oder __ne__() Betrieb definiert ist, Klasseninstanzen werden verglichen mit Objektidentität („Adresse“).

Also, im Grunde bekommt man nicht eine __cmp__ Methode standardmäßig, aber Instanzen von benutzerdefinierten Klassen können zu anderen Objekten verglichen werden; Wenn die Instanz keine Methode __cmp__ hat, wird stattdessen die Objektidentität (bestimmt durch id(obj), die normalerweise die Speicheradresse des Objekts ist) verwendet.

Verwandte Themen