`@cls` - Class Made Aware to Decorator
@cls - Class Made Aware to Decorator
The purpose of this library is to provide possibility to create decorators, especially in super classes, with current class
cls as argument.
Everything are centered with our new
cls module, keyword, magic, or what every you think it would be.
pip from PyPI:
pip install acls
A typical snippet looks like:
from functools import wraps import cls class Base(metaclass=cls.ClsMeta): @cls def decor(cls, decor_arg): def wrap(func): @wraps(func) def wrapper(self): # do something with `func` retval = func(self) # do something with `retval` return retval return wrapper return wrap class Extended(Base): @cls.decor('some arg') def func(self): # do something pass
The magic is that you can use
Extended class, which is inheritance from
What is more, with in the decorator
cls will be assigned with the correct current class.
In this example, it would simply be a reference to
This would be helpful if you want to make use of some class property here in the decorator.
Well, there is no magic. I created a delegator in class namespace to enable both class possible to use
So, it is not the module
cls as we imported on the top.
I use this to make it more consistent looking, and fool some interpreters like
No offense, just want to make them less noisy.
Unfortunately, This work is based on customizing python class creation.
I have to make use of
__prepare__, which is introduced only to python 3.
That means there is no known possible backward compatibility with python 2 now.
The code is tested against python 3.5+.
Please let me know if you come up with an idea how to manipulate class creation in python 2.
There are a couple of issues, with which I am talking. Contributions are welcome.
- relying on length of arguments and
callable()to support optional arguments in decorator
- not compatible with
@classmethod, or many other decorators
- no documents :see_no_evil:!
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.