iT邦幫忙

DAY 27
0

Python初學起步走系列 第 27

[Python初學起步走-Day27] - 物件導向(Object-oriented,OO) - 特殊方法(運算子)

延續使用人類(Human)物件

#myclass.py
class Human:
    def __init__(self,h=0,w=0):
        self.height=h
        self.weight=w
    def BMI(self):
        return self.weight / ((self.height/100)**2)

如果今天人類(Human)物件要進行運算的動作(+,-,*,/...)

例如

import myclass
a = mclass.Human(180,80)
b = mclass.Human(170,70)
a+b????
a+=b????

我們可以實作覆寫掉對應的特殊方法

__add__  +
__iadd__  +=
__sub__  -
__isub__  -=
__mul__  *
__imul__  *=
__truediv__   /
__itruediv__   /=
__floordiv__  //
__ifloordiv__  //=
__mod__  %
__imod__  %=
__pow__  **
__ipow__  **=

舉個例子

我們設定如果a人類(Human)物件與b人類(Human)物件相加(a+b),定義為傳回身高(height)相加

如果是a+=b, 定義為把a的身高(height)與體重(weight)相加後設定成a物件

#myclass.py
class Human:
    def __init__(self,h=0,w=0):
        self.height=h
        self.weight=w
    def BMI(self):
        return self.weight / ((self.height/100)**2)
    def __add__(self,other):
        return self.height + other.height
    def __iadd__(self,other):
        self.height += other.height
        self.weight += other.weight
        return self






#main.py
import myclass
a = myclass.Human(180,80)
b = myclass.Human(170,70)
print(a+b)
print(a.height,a.weight)
a+=b
print(a.height,a.weight)


上一篇
[Python初學起步走-Day26] - 物件導向(Object-oriented,OO) - 特殊方法(比較)
下一篇
[Python初學起步走-Day28] - 物件導向(Object-oriented,OO) - 私有屬性、私有方法
系列文
Python初學起步走30

尚未有邦友留言

立即登入留言