使用python的V3,我创建:
class NewInt(int):
def __rtruediv__(self, num):
print('in here')
x = NewInt(5)
343 / x # called rtruediv as I expect, but
343.3 / x # does not call rtruediv
不知道为什么这是因为:
x / 343
x / 343.3 #both will call truediv
对我来说,这似乎不一致..
任何人都有解释为什么这是..当Python确实343.3 / x有一个可以覆盖的方法?
我在查看有关过载的一些信息时发现了这种行为,并发现了这种不一致.
戴夫
解决方法:
如果右侧操作数是左侧操作数类的子类的实例,则__rtruediv__仅优先于__truediv__.
当你执行343 / x时,NewInt是int的子类,因此x的__rtruediv__获得优先权.当你执行343.3 / x时,NewInt不是float的子类,所以343.3的__truediv__获得优先权.
343.3 .__ truediv __(x)不返回NotImplemented,因为float知道如何用float分割浮点数.因此,x .__ rtruediv__不会被调用.