将自定义数字类添加到Python int会导致“ TypeError”

时间:2019-05-28 00:58:17

标签: python python-3.x class typeerror magic-methods

有没有一种方法可以将Python类的实例添加到整数(默认int类)中。例如,如果我有一个使用魔术方法的类:

class IntType:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        return self.value + other

# Works
print(IntType(10) + 10)

# Doesn't Work
print(10 + IntType(10))

我无法将IntType添加到内置int类中。如果我尝试将IntType添加到整数,则会出现以下错误:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print(10 + IntType(10))
TypeError: unsupported operand type(s) for +: 'int' and 'IntType'

我想让它起作用的唯一方法是以某种方式更改int类的__add__方法。如果您想知道为什么我不只是将int添加到IntType(例如IntType(10) + 10)是因为我需要对所有运算符都起作用,例如减法(其中的顺序很重要)。我正在使用Python 3。

1 个答案:

答案 0 :(得分:3)

__radd__类实施反向加法(IntType)应该可以解决此问题:

>>> class IntType: 
...     def __init__(self, value): 
...         self.value = value 
... 
...     def __add__(self, other): 
...        return self.value + other 
...
...     def __radd__(self, other): 
...         return self.value + other 

>>> IntType(10) + 10 == 10 + IntType(10)
True

这是Python在其他所有方法均失败时尝试使用的操作(即int.__add__(IntType)不是已定义的操作)。