13

Pythonドキュメントええ、私はドキュメントでこれを持っています)でそれはそれを言います:

ユーザー定義クラスには、デフォルト__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__私はどこに、または何が欠けていますか?

4

1 に答える 1

9

ドキュメントは少し誤解を招くものです。完全なストーリーを得るには__cmp__、 、つまりこの部分を読む必要があります。

no の場合__cmp__()__eq__()または__ne__()操作が定義されている場合、クラス インスタンスはオブジェクト ID (「アドレス」) によって比較されます。

したがって、基本的に、デフォルトではメソッドは取得されませんが、__cmp__ユーザー定義クラスのインスタンスは他のオブジェクトと比較できます。インスタンスに__cmp__メソッドがない場合は、オブジェクト ID (id(obj)通常はオブジェクトのメモリ アドレスである によって決定される) が代わりに使用されます。

于 2012-10-15T20:44:27.487 に答える