Skip to content Skip to sidebar Skip to footer

Assign External Function To Class Variable In Python

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 import my_func class Ba

Solution 1:

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:

classBar(object):
    func = staticmethod(my_func)
    defrun(self):
        self.func()

Alternatively, access the unbound function via the __func__ attribute on the method:

defrun(self):
    self.func.__func__()

or go directly to the class __dict__ attribute to bypass the descriptor protocol altogether:

defrun(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.

Post a Comment for "Assign External Function To Class Variable In Python"