簡體   English   中英

__eq__屬性和相等運算符之間的關系?

[英]Relationship between the __eq__ attribute and the equality operator?

因此,以下內置類具有__eq__屬性,(我認為)這是為什么您可以測試其實例是否相等的原因:

>>> 1.2.__eq__( 1.2 )
True
>>> 1.2 == 1.2
True
>>> 'hello'.__eq__( 'hi' )
False
>>> 'hello' == 'hi'  
False
>>> [1,2].__eq__( [1,2] )
True
>>> [1,2] == [1,2]  
True

然后我很驚訝地發現int對象沒有__eq__ ,但是我們仍然可以比較它們:

>>> hasattr( 1, '__eq__' )
False
>>> 1 == 2 
False

這是怎么回事? 我是否誤解了__eq__和相等運算符之間的關系?

int對象使用__cmp__方法代替:

如果未定義豐富比較(請參見上文),則由比較操作調用。

豐富的比較包括__eq__

演示:

>>> (1).__cmp__(2)
-1
>>> (1).__cmp__(1)
0
>>> (1).__cmp__(0)
1

__cmp__返回0 ,兩個值相等。

Python 3取消了cmp()比較和相關的特殊方法。 在Python 3中, int 確實具有__eq__方法:

>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=4, micro=0, releaselevel='final', serial=0)
>>> (1).__eq__(1)
True

另外,Python 3 int對象也提供了其他豐富的比較方法 __lt____le____ne__ __lt____le____ne__ __gt__ __ge__ ,Python 2版本中缺少所有方法。

Python 只是從 __cmp__開始,僅在Python 2.1中添加了豐富的比較支持(請參閱PEP 207 ),並且直到Python 3才轉換了整數。幾乎沒有必要保留兩個比較系統,因此舍棄了比較系統表達形式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM