Python 如何实现整数+;MyObject()?
出于好奇而问。我一直在玩python,并注意到这种行为:Python 如何实现整数+;MyObject()?,python,python-3.x,Python,Python 3.x,出于好奇而问。我一直在玩python,并注意到这种行为: (2)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu (2)。\uuuu add\uuuuu('a')导致未实施——还没有什么奇怪的地方 'a.\uu添加(2)生成异常 但是,当我尝试创建自己的类时: 类整数: 定义初始化(self,d): self.val=d 定义添加(self,i): 返回self.val+int(一) 定义
(2)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu李>
(2)。\uuuu add\uuuuu('a')
导致未实施
——还没有什么奇怪的地方李>
'a.\uu添加(2)
生成异常
但是,当我尝试创建自己的类时:
类整数:
定义初始化(self,d):
self.val=d
定义添加(self,i):
返回self.val+int(一)
定义(自我,我):
self.val+=int(i)
回归自我
定义内部(自我):
返回self.val
将它与十进制进行比较,会发生一些奇怪的事情。在这种情况下,它们的行为类似:
导入十进制
a=整数(2)
a+=2
打印(整数(a+2))
d=十进制。十进制(2)
d+=2
打印(整数(d+2))
但是,情况并非如此:2+d
正常工作,而2+a
抛出异常:
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
2+a
TypeError: unsupported operand type(s) for +: 'int' and 'Integer'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
2+a
TypeError:不支持+:'int'和'Integer'的操作数类型
即使(2).\u add\u(a)
和(2).\u add\u(d)
都会产生未实现的和a.\u add\u(2)
和d.\u add\u(2)
工作正常。
decimal.decimal究竟发生了什么?我如何在我的课堂上做到这一点
引发异常
请将其粘贴到此处好吗?@Tgsmith61591确实这就是existsHow确实能起作用的原因?是否仅在\uuuu add\uuuu
返回未实现后调用\uuu radd\uuuu
?是否存在任何特殊情况(\uuuuu radd\uuuuu
返回未实现
或其他情况),如果有,这些情况会发生什么?为什么\uuuuuu radd\uuuu
模块中没有操作符
记录?您的第一个问题是:,如果正向函数引发NotImplemented,则会调用反向函数:这是您的第二个问题:因为它不需要运算符函数的映射。
class Integer:
def __init__(self, d):
self.val = d
def __add__(self, i):
return self.val + int(i)
def __radd__(self, i):
return self.__add__(i) # might be different if operation is not commutative
def __iadd__(self, i):
self.val += int(i)
return self
def __int__(self):
return self.val
x = Integer(5) + 5
y = 5 + Integer(5)