为什么在定义魔法方法当中使用了该魔法方法对应的操作,不会进入递归?比如下面的代码中,在调用"+"时,内部魔法方法为什么不会调用自身?
class A:
def __init__(self,a):
self.e=a
def __add__(self):
print('被调用了')
return self.e+2
a=A(2)
a+1
被调用了
4
根据你的代码,看起来似乎你的 add 魔法方法定义有误。add 应该接受一个参数(除 self 外),这个参数是你想要与该对象相加的值。你的 add 方法没有接收这个参数,这可能会导致错误。下面是一个正确的示例:
class A:
def __init__(self, a):
self.e = a
def __add__(self, other):
print('被调用了')
return self.e + other
a = A(2)
print(a + 1)
在这个例子中,当你执行 a + 1
时,Python 会调用 a.__add__(1)
。因此,__add__
方法需要一个额外的参数 other
,以便知道需要与什么相加。当 a.__add__(1)
被调用时,Python 知道 self.e + other
是在调用基础的整数加法,所以并不会递归地再次调用 a.__add__(1)
。
另外本蒟蒻把公众号的高分原创文章整理成了一本电子书,取名《Python修炼之道》,一共 400 页!
具体内容请戳:
熬夜爆肝整理 400 页 《Python 修炼之道》,一本高分原创高清电子书送给你!目录如下:
现在免费送给大家,在我的公众号Python空间(微信搜 Devtogether) 回复 修炼之道即可获取。
回答:Python魔法方法会出现递归调用的情况。当我们在定义一个魔法方法时使用了该魔法方法对应的操作时,如果我们没有正确的定义该魔法方法,就会导致出现递归调用。例如,在定义"+"操作时,如果我们没有正确定义__add__()方法,就会导致内部魔法方法调用自身。要避免这种情况,我们应该正确地定义魔法方法,以确保不会出现不必要的递归调用。
关于"+"操作内部魔法方法为什么不会调用自身的问题,其实它是因为Python中的"+"操作符在内部已经被定义了,而我们可以通过定义__add__()方法来对其进行扩展。在使用"+"操作符时,实际上是调用了内部的__add__()方法,而不是自身。因此,我们只需要正确地定义__add__()方法,就可以正常使用它而不会出现递归调用。