gpt4 book ai didi

python - 为什么调用 Python 的 'magic method' 不像对应的运算符那样进行类型转换?

转载 作者:IT老高 更新时间:2023-10-28 22:03:51 25 4
gpt4 key购买 nike

当我从整数中减去 float 时(例如 1-2.0),Python 会进行隐式类型转换(我认为)。但是当我使用魔术方法 __sub__ 调用我认为是相同的操作时,它突然不再存在了。

我在这里缺少什么?当我为自己的类重载运算符时,除了将输入显式转换为我需要的任何类型之外,还有其他方法吗?

a=1
a.__sub__(2.)
# returns NotImplemented
a.__rsub__(2.)
# returns NotImplemented
# yet, of course:
a-2.
# returns -1.0

最佳答案

a - b 不仅仅是 a.__sub__(b)。如果 a 无法处理该操作,它也会尝试 b.__rsub__(a),在 1 - 2. 的情况下,它是float 的 __rsub__ 处理操作。

>>> (2.).__rsub__(1)
-1.0

您运行了 a.__rsub__(2.),但这是错误的 __rsub__。您需要右侧操作数的 __rsub__,而不是左侧操作数。


减法运算符没有内置隐式类型转换。 float.__rsub__ 必须手动处理整数。如果您想在自己的运算符实现中进行类型转换,您也必须手动处理。

关于python - 为什么调用 Python 的 'magic method' 不像对应的运算符那样进行类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54775946/

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