Предположим, у меня есть класс s, в котором есть члены op
, left
, right
(это вопрос, связанный с Как назначить операцию, такую как сумма или замена и т. Д., Переменной )Итак, в op
я храню оператор, например - operator.add
, operator.radd
и т. Д. Но я хочу сохранить operator.rfloordiv
, и такого члена в этом классе нет?: \ Но я могу перегрузить __rfloordiv__
, поэтому он вообще существует .
Идея состоит в том, чтобы применять op
к left
и right
при необходимости.
Мой подход заключается в следующем: сохранить некоторую специальную строку в моем op
, а затем, перед тем, какприменяя op
, чтобы проверить, является ли op
строкой.Если это так, напишите некрасивое утверждение if-else
, чтобы проверить все - rfloordiv
, rmod
, rtruediv
.Если нет - просто примените op
с обоими параметрами.Но это чертовски уродливо ..
Есть ли лучший способ добиться этого?
Я знаю, что это можно сделать с помощью функции lambda
, но если я сделаю это так,есть ли способ увидеть, что это за функция lambda
(на данный момент, когда мне нужно увидеть, что такое op
, я проверяю это в выражении if
, например: if self.op is operator.radd: ..
, но что, если op
это lambda
функция?)