有時我們希望自定義類的例項間可以使用<, <=, >, >=, ==, !=符號進行比較,我們自定義比較的行為
比如,比較乙個矩形例項和乙個圓形例項
我們希望它們比較的是面積
from functools import total_ordering # 類物件的比較
import math # 匯入圓周率計算圓面積
import abc # 抽象基類
@total_ordering # 類物件的比較
class
shape
(metaclass=abc.abcmeta)
:# 抽象基類
@abc.abstractmethod
defarea
(self)
:pass
def__lt__
(self, other)
:return self.area(
)< other.area(
)def
__eq__
(self, other)
:return self.area(
)== other.area(
)class
rect
(shape)
:def
__init__
(self, w, h)
: self.w = w
self.h = h
defarea
(self)
:return self.w * self.h
class
cirle
(shape)
:def
__init__
(self, r)
: self.r = r
defarea
(self)
:return self.r **
2*math.pi
c = cirle(3)
rect = rect(1,
2)print
(c == rect)
類物件的比較
equals函式和hashcode函式 public boolean equals object obj public int hashcode 注意覆蓋equals時總要覆蓋hashcode 乙個很常見的錯誤根源在於沒有覆蓋hashcode方法。在每個覆蓋了equals方法的類中,也必須覆蓋has...
Object 類的比較
object 所有類的父類。所有物件都具備的內容不斷地抽取,就到了乙個頂層object類中。public class person public void setages int ages person int ages 既然父類中已經提供了對對像相等的比較,可以直接使用,如果比較內容不是所需要,可...
集合類的比較
集合類的分類 1.list結構集合類 arraylist linkedlist vector stack 2.map結構集合類 hashmap hashtable 3.set結構集合類 hashset treeset 4.queue結構集合類和queue介面 list結構集合類和map結構集合類的區...