gpt4 book ai didi

python - Monkey 修补运算符重载在 Python2 和 Python3 中的行为不同

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:35 25 4
gpt4 key购买 nike

<分区>

考虑以下代码:

class Foo:
def __mul__(self,other):
return other/0
x = Foo()
x.__mul__ = lambda other:other*0.5
print(x.__mul__(5))
print(x*5)

在 Python2 中(使用 from future import print),输出

2.5
2.5

在 Python3 中,这个输出

2.5

---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-1-36322c94fe3a> in <module>()
5 x.__mul__ = lambda other:other*0.5
6 print(x.__mul__(5))
----> 7 print(x*5)

<ipython-input-1-36322c94fe3a> in __mul__(self, other)
1 class Foo:
2 def __mul__(self,other):
----> 3 return other/0
4 x = Foo()
5 x.__mul__ = lambda other:other*0.5

ZeroDivisionError: division by zero

我在尝试实现支持代数运算子集的类型时遇到过这种情况。例如,我需要为惰性修改乘法函数:必须推迟一些计算,直到实例与另一个变量相乘。猴子补丁在 Python 2 中有效,但我注意到它在 Python 3 中失败了。

为什么会这样?有什么办法可以在 Python3 中获得更灵活的运算符重载吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com