what is the special method for exponent? For example:
class Foo:
def __init__(self,data):
self.data = data
def __pow__(self, power):
return self.data ** power
if __name__ == '__main__':
f=Foo(2)
print(f**3)
yields 8 correctly, but when I run 3**f
it says: TypeError: unsupported operand type(s) for ** or pow(): 'int' and 'Foo'
CodePudding user response:
You should've used __rpow__
to use like that
Code:
class Foo:
def __init__(self,data):
self.data = data
def __pow__(self, power):
return self.data ** power
def __rpow__(self, power):
return self.data ** power
if __name__ == '__main__':
f=Foo(2)
print(f**3) # 8
print(3**f) # 8
Tell me if its not working...
CodePudding user response:
Another way would be inheriting the int class:
class Foo(int):
def __init__(self, x):
self.x = x
def __pow__(self, power):
return self.x ** power
a = Foo(2)
print(2 ** a)
CodePudding user response:
When you execute f**3
, the interpreter automatically calls __pow__
method on the object with the integer you gave it(the __pow__
method is an equivalent for **
operator ), but it can't interpret any way to use f
as the power of a number. So you should define another function inside too Foo
class for that usage.