git.net

[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


04.09.19 17:21, Antoon Pardon ????:
> 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?
> 

You can make register() returning a descriptor with the __set_name__() 
method. A bit of black magic:

class register:
     def __init__(self, func):
         self.func = func
     def __get__(self, instance, owner):
         return self.func.__get__(instance, owner)
     def __set_name__(self, owner, name):
         if not hasattr(owner, 'my_cool_functions'):
             owner.my_cool_functions = []
         owner.my_cool_functions.append(name)
         setattr(owner, name, self.func)