自定义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
相关产品推荐
相关产品推荐

