关于魔法方法的疑惑:为什么要用魔法方法,在什么时候使用魔法方法
最近学到了魔法方法的相关内容,一直非常困惑,不理解为什么要使用魔法方法。比如求和,这样写
class A ():
def he (self,x,y):
self.he=x+y
a=A()
>>> a.he(3,5)
>>> a.he
8
和这样写
class A(int):
def __add__(self,x):
return int.__add__(self,x)
>>> a=A(3)
>>> b=A(5)
>>> a+b
8
两者的应用有什么区别吗,方法二不是很好理解,而且写起来也更麻烦,还更容易出错
什么情况使用方法一,什么情况才用方法二呢?
方法二优点是什么呢?
{:5_94:}
{:10_254:} {:5_94:} 方法而的作用是自定义运算符操作
比如说你要写一个表示复数的Complex类,需要提供一个“加”操作,这时候是写一个add()方法还是写一个__add__()魔法方法呢?
如果是.add()方法,使用者就得这么写:
complex1.add(complex2.add(complex3.add(complex4)))
而如果是魔法方法,就可以这么写:
complex1 + complex2 + complex3 + complex4
这样一来,代码更清晰,使用起来也更符合逻辑了 本帖最后由 isdkz 于 2022-1-17 13:22 编辑
魔法方法是解释器会根据对象的行为自动去调用的方法,比如说你自己写了个add()方法返回值为两个对象相加,那你要使用的时候就得自己去显式调用,甚至另一个对象也需要你自己手动传进去对象.add(另一个对象),而在python的操作符中是有加法这个操作的,而这个加法操作就由python解释器去自动调用了__add__()方法,你如果重写了__add__()方法,就可以直接使用对象 + 另一个对象,这样是不需要自己显式去调用__add__()方法的,传参都省了,当然你想显式调用也还是可以的,就像这样对象.__add__(另一个对象)
eg:
a = int(1)
b = int(2)
a + b 等同于 a.__add__(b)
页:
[1]