Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何实现整数+;MyObject()?_Python_Python 3.x - Fatal编程技术网

Python 如何实现整数+;MyObject()?

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(一) 定义

出于好奇而问。我一直在玩python,并注意到这种行为:

  • (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)