Добавление пользовательского числового класса в Python int приводит к «TypeError» - PullRequest
1 голос
/ 28 мая 2019

Есть ли возможность добавить экземпляр класса 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 class '__add__. Если вам интересно, почему я не просто добавляю int к IntType (например, IntType(10) + 10), это потому, что мне нужно, чтобы это работало для всех операторов, например, для вычитания (где важен порядок). Я использую Python 3.

1 Ответ

3 голосов
/ 28 мая 2019

Реализация обратного сложения (__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) не определенная операция).

...