Почему перегрузка математических операторов в python зависит от того, в каком порядке они используются? - PullRequest
0 голосов
/ 14 февраля 2020

Если я создаю класс, такой как 'A' ниже:

class A(object): 
     a = 1 
     def __truediv__(self, var): 
         return self.a / var 

, а затем пытаюсь разделить int на A следующим образом:

print(3 / A())

python вызывает ошибку TypeError , Однако, если я делю int на этот объект, python печатает:

print(A() / 3)

python печатает 0.333333.

Как я могу заставить класс работать так, чтобы я мог выполнять математические операции в любом порядке?

NB Numpy Похоже, что массивы могут работать в обоих направлениях, например:

import numpy as np

1 / np.arange(1, 5)
np.arange(1, 5) / 1

работает и работает, как и ожидалось.

1 Ответ

1 голос
/ 14 февраля 2020

Также реализуйте методы отраженного Дандер. В вашем случае это __rtruediv__()

...