[英]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.