[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How do I give a decorator acces to the class of a decorated function

Antoon Pardon wrote:

> What I am trying to do is the following.
> class MyClass (...) :
>     @register
>     def MyFunction(...)
>         ...
> What I would want is for the register decorator to somehow create/mutate
> class variable(s) of MyClass.
> Is that possible or do I have to rethink my approach?

If you are willing to delegate the actual work to the metaclass call: 

def register(f):
    f.registered = True
    return f

def registered(name, bases, namespace):
    namespace["my_cool_functions"] = [
        n for n, v in namespace.items()
        if getattr(v, "registered", False)
    return type(name, bases, namespace)

class MyClass(metaclass=registered) :
    def foo(self):
    def bar(self):
    def other(self):