python(Class5)

讓類支持比較操作


類似運算符重載



from functools import total_ordering
from abc import ABCMeta, abstractclassmethod


@total_ordering  # 裝飾器,作用類似于c++中的模版:根據(jù)小于和等于的方法重載,可以自行推測出小于等于和大于和大于等于的方法定義,大大的簡化了代碼
class Shape(object):
    @abstractclassmethod  # 抽象基類,子類必須覆蓋
    def area(self):
        pass

    def __lt__(self, other):
        if not isinstance(other, Shape):
            raise TypeError('obj is Not Shape')
        return self.area() < other.area()

    def __eq__(self, other):
        if not isinstance(other, Shape):
            raise TypeError('obj is Not Shape')
        return self.area() == other.area()


class Rectangle(Shape):
    def __init__(self, w, h):
        self._w = w
        self._h = h

    def area(self):
        return self._w * self._h


class Circle(Shape):
    def __init__(self, r):
        self._r = r

    def area(self):
        return self._r ** 2 * 3.14


c1 = Circle(3)
r1 = Rectangle(5, 3)
r2 = Rectangle(4, 4)

print(r1 <= r2)
print(r1 > c1)
# print(r1 > 1)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容