How do I give a decorator acces to the class of a decorated function
Peter Otten
__peter__ at web.de
Wed Sep 4 11:46:50 EDT 2019
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) :
@register
def foo(self):
pass
@register
def bar(self):
pass
def other(self):
pass
print(MyClass.my_cool_functions)
More information about the Python-list
mailing list