`@cls`-类使decorator知道

acls的Python项目详细描述


@cls-类使decorator知道

PyPI - LicensePyPIPyPI - StatusPyPI - Python Version

GitHubCircleCIBuild Statuscodecov

这个库的目的是提供创建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。 我必须使用^{},这是introduced只到python 3。 这意味着现在与python 2不存在已知的向后兼容性。 代码是用Python3.5+测试的。

如果你想知道如何在Python2中操作类的创建,请告诉我。

有几个问题,我正在与之交谈。欢迎捐款。

已知问题

  • []依赖参数长度和callable()来支持decorator中的可选参数
  • []与@classmethod或许多其他装饰程序不兼容
  • []使pylint非常嘈杂
  • []没有文件:看不看邪恶:!

许可证

MIT License, Copyright (c) 2019 guoquan

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由于外键约束,java数据库插入失败   java在对失败的测试用例截图时出错,并且它没有附加到扩展报告中   java FragmentPagerAdapter总是从第一页开始   java内存泄漏,当我将数据从一个树存储库复制到另一个ext js 4.1时   java确保带有特定注释的字段是“私有的”   Java如何将UTC毫秒转换为UTC日期   开源Java:Solaris上的AWT   java为什么BufferedReader只读取第一行?   执行数据库查询时,java JTable不会刷新   java 7中的下划线和二进制文字。!!!??   java使用STaX将xml转换为另一个xml需要很多时间   hadoop如何使用JavaAPI从hbase中的表中选择特定列   使用JLabel的java拖放   用于“绘制”pdf文件的pdf生成Java库   java getResourceAsStream返回null?   java在目标帧中打开窗口   滚动对象时,java鼠标光标不会改变   java有人能解释二进制搜索树中的递归delete()并帮我转换它吗