Отсутствует магический метод возведения в степень в PythonPython

Программы на Python
Anonymous
Отсутствует магический метод возведения в степень в Python

Сообщение Anonymous »

Я определяю несколько методов числовой магии в специальном классе и обнаружил не могу объяснить пробел, связанный с pow()/возведением в степень.

Код: Выделить всё

__pow__(self, other, modulo=None)
вызывается, когда ваш собственный класс является первым/крайним левым операндом.

Код: Выделить всё

__rpow__(self, other, modulo=None)
вызывается, когда ваш собственный класс является вторым операндом.

Я обнаружил случай, когда ни один из них не вызывается, и я этого не понимаю. Вот пример случая, который просто возвращает имя вызываемого метода:

Код: Выделить всё

class Power:
def __pow__(self, other, modulo=None):
return '__pow__'
def __rpow__(self, other, modulo=None):
return '__rpow__'

>>> x = Power()
>>> pow(x, 5)
'__pow__'
>>> pow(5, x)
'__rpow__'
Пока выглядит правильно. Но посмотрите, что произойдет, если вы используете необязательный аргумент по модулю:

Код: Выделить всё

>>> pow(x, x, 5)
'__pow__'
>>> pow(5, x, 5)
Traceback (most recent call last):
File "", line 1, in 
TypeError: unsupported operand type(s) for pow(): 'int', 'Power', 'int'
tl;dr, кажется, __rpow__ не вызывается при использовании аргумента по модулю. Что дает?

Подробнее здесь: https://stackoverflow.com/questions/556 ... -in-python

Вернуться в «Python»