`@cls`-类使decorator知道
acls的Python项目详细描述
@cls
-类使decorator知道
这个库的目的是提供创建decorator的可能性,特别是在超级类中,使用当前类cls
作为参数。
一切都以我们新的cls
模块、关键字、魔术或您认为的一切为中心。
开始
安装
通过来自pypi的pip
安装:
pip install acls
示例
典型的片段如下:
fromfunctoolsimportwrapsimportclsclassBase(metaclass=cls.ClsMeta):@clsdefdecor(cls,decor_arg):defwrap(func):@wraps(func)defwrapper(self):# do something with `func`retval=func(self)# do something with `retval`returnretvalreturnwrapperreturnwrapclassExtended(Base):@cls.decor('some arg')deffunc(self):# do somethingpass
神奇的是,您可以在Extended
类中使用@cls.decor
,这是对Base
的继承。
而且,在decoratorBase.decor
中,参数cls
将分配给正确的当前类。
在本例中,它只是对Extended
的引用。
如果您想在decorator中使用某些类属性,这将非常有用。
魔术
好吧,没有魔法。我在类命名空间中创建了一个delegator,使两个类都可以使用@cls
。
所以,它不是我们在顶部导入的模块cls
。
我用这个来让它看起来更加一致,并且愚弄一些解释者,比如pylint
。
无意冒犯,只是想让他们少吵闹。
限制
不幸的是,这项工作是基于customizing python class creation。
我必须使用^{
如果你想知道如何在Python2中操作类的创建,请告诉我。
有几个问题,我正在与之交谈。欢迎捐款。
已知问题
- []依赖参数长度和
callable()
来支持decorator中的可选参数 - []与
@classmethod
或许多其他装饰程序不兼容 - []使
pylint
非常嘈杂 - []没有文件:看不看邪恶:!
许可证
MIT License, Copyright (c) 2019 guoquan