在Python中,如何覆盖算术运算符“/”产生:1 / 0 => math.inf?
In Python, how to override the arithmetic operator "/" to produce: 1 / 0 => math.inf?
在 Python 中,当我 运行 操作:1 / 0 时,其默认行为是生成异常:“ZeroDivisionError:浮点数除以零”
如何重载此默认行为以便我可以获得:
1 / 0 => math.inf
您可能必须编写自己的库来允许这种情况发生,做一些简单的事情可能并不难,当您收到该错误时会看到该错误并将该数字分配给 'infinity'
您需要定义自己的 class 并在其中至少定义方法 __truediv__
(/
) 和 __floordiv__
(//
)。例如,如果您只定义这两个 +
将不起作用(请参阅下面的错误)。
import math
class MyFloat:
def __init__(self, val):
self.val = val
def __truediv__(self, other):
if other.val == 0:
return math.inf
return self.val / other.val
def __floordiv__(self, other):
if other.val == 0:
return math.inf
return self.val // other.val
one = MyFloat(1)
zero = MyFloat(0)
print(one / zero)
print(one // zero)
// will throw an error (PyCharm will also pick up on this)
print(one + zero)
预期输出
Traceback (most recent call last):
File "/home/tom/Dev/Studium/test/main.py", line 24, in <module>
print(one + zero)
TypeError: unsupported operand type(s) for +: 'MyFloat' and 'MyFloat'
inf
inf
有关 特殊 Python 函数的列表,请参阅 this website。
在 Python 中,当我 运行 操作:1 / 0 时,其默认行为是生成异常:“ZeroDivisionError:浮点数除以零”
如何重载此默认行为以便我可以获得: 1 / 0 => math.inf
您可能必须编写自己的库来允许这种情况发生,做一些简单的事情可能并不难,当您收到该错误时会看到该错误并将该数字分配给 'infinity'
您需要定义自己的 class 并在其中至少定义方法 __truediv__
(/
) 和 __floordiv__
(//
)。例如,如果您只定义这两个 +
将不起作用(请参阅下面的错误)。
import math
class MyFloat:
def __init__(self, val):
self.val = val
def __truediv__(self, other):
if other.val == 0:
return math.inf
return self.val / other.val
def __floordiv__(self, other):
if other.val == 0:
return math.inf
return self.val // other.val
one = MyFloat(1)
zero = MyFloat(0)
print(one / zero)
print(one // zero)
// will throw an error (PyCharm will also pick up on this)
print(one + zero)
预期输出
Traceback (most recent call last):
File "/home/tom/Dev/Studium/test/main.py", line 24, in <module>
print(one + zero)
TypeError: unsupported operand type(s) for +: 'MyFloat' and 'MyFloat'
inf
inf
有关 特殊 Python 函数的列表,请参阅 this website。