You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义MyNumber类中int与float相加的不一致行为求助

自定义MyNumber类中int与float相加的不一致行为求助

我定义了一个MyNumber类,初始化时接收一个数值,只保留self.value这一个实例属性。同时实现了一些代理原数值类型方法的特殊方法,比如__add__和__radd__。

当self.value是浮点数对象时,所有方法都正常工作,但如果self.value是整数对象,和浮点数进行运算就会报错。以下是我的代码:

class MyNumber:
    def __init__(self, value):
        self.value = value
    def __repr__(self):
        return f'{self.__class__.__name__}(value={self.value})'
    def __int__(self):
        return self.value.__int__()
    def __float__(self):
        return self.value.__float__()
    def __bool__(self):
        return self.value.__bool__()
    def __add__(self, other):
        return self.value.__add__(other)
    def __radd__(self, other):
        return self.value.__radd__(other)

我做了如下测试:

mynumber_int = MyNumber(1)
print(mynumber_int)
print(mynumber_int + 2)    # 正常运行
print(3 + mynumber_int)    # 正常运行
#print(mynumber_int + 2.)  # 报错:TypeError: unsupported operand type(s) for +: 'MyNumber' and 'float'
#print(3. + mynumber_int)  # 报错:TypeError: unsupported operand type(s) for +: 'float' and 'MyNumber'

mynumber_float = MyNumber(1.)
print(mynumber_float)
print(mynumber_float + 2)    # 正常运行
print(3 + mynumber_float)    # 正常运行
print(mynumber_float + 2.)   # 正常运行
print(3. + mynumber_float)   # 正常运行

我原本以为mynumber_int + 2.应该和3 + mynumber_float一样正常运行,但前者却触发了TypeError,后者却能成功执行。有没有大佬能帮忙解释一下原因,或者给我一些解决的思路?非常感谢!

备注:内容来源于stack exchange,提问作者Yahya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:45:27