I am trying to assign a function defined elsewhere to a class variable so I can later call it in one of the methods of the instance, like this:
from module impor
Python functions are descriptor objects, and when attributes on a class accessing them an instance causes them to be bound as methods.
If you want to prevent this, use the staticmethod function to wrap the function in a different descriptor that doesn't bind to the instance:
class Bar(object):
func = staticmethod(my_func)
def run(self):
self.func()
Alternatively, access the unbound function via the __func__
attribute on the method:
def run(self):
self.func.__func__()
or go directly to the class __dict__
attribute to bypass the descriptor protocol altogether:
def run(self):
Bar.__dict__['func']()
As for math.pow
, that's not a Python function, in that it is written in C code. Most built-in functions are written in C, and most are not descriptors.