特别案件高级描述员。

Advanced-Descriptors的Python项目详细描述


高级描述符

https://travis-ci.com/python-useful-helpers/advanced-descriptors.svg?branch=masterAzure DevOps buildshttps://coveralls.io/repos/github/python-useful-helpers/advanced-descriptors/badge.svg?branch=masterDocumentation Statushttps://img.shields.io/pypi/v/advanced-descriptors.svghttps://img.shields.io/pypi/pyversions/advanced-descriptors.svghttps://img.shields.io/pypi/status/advanced-descriptors.svghttps://img.shields.io/github/license/python-useful-helpers/advanced-descriptors.svghttps://img.shields.io/badge/code%20style-black-000000.svg

此套餐包括特殊情况下的助手:

  • separateClassMethod-允许ClassMethod和normal方法都具有相同的名称。
  • 高级属性-可以设置类范围getter的属性。
  • logonAccess-登录成功获取/设置/删除或失败的属性。

分离法

可以使用标准的decorator语法设置此描述符。 使用参数创建实例:

defimeth(instance):returninstance.valuedefcmeth(owner):returnowner.valueclassTarget(object):value=1def__init__(self):self.value=2getval=advanced_descriptors.SeparateClassMethod(imeth,cmeth)

创建实例包装作为装饰符:

classTarget(object):value=1def__init__(self):self.value=2@advanced_descriptors.SeparateClassMethoddefgetval(self):returnself.value@getval.class_methoddefgetval(cls):returncls.value

只使用方法和只使用类方法的情况是无用的: 在相应的情况下,应使用“原样方法”和“类方法”。

注意

ClassMethod接收类作为参数。默认情况下,IDE不知道自定义描述符和替换项。

高级属性

当除了普通的属性api之外,还需要类getter时,应该使用这个描述符。 如果还需要类范围的setter和deleter,则应在元类中使用标准属性。

用法示例:

  1. 除了普通属性api之外:
classTarget(object):_value=777def__init__(self):self._value=42@advanced_descriptors.AdvancedPropertydefval(self):returnself._value@val.setterdefval(self,value):self._value=value@val.deleterdefval(self):self._value=0@val.cgetterdefval(cls):returncls._value
  1. 例如,也可以使用类范围的getter:
classTarget(object):_value=1val=advanced_descriptors.AdvancedProperty()@val.cgetterdefval(cls):returncls._value

注意

类范围的getter接收类作为参数。默认情况下,IDE不知道自定义描述符和替换项。

登录访问

属性的这种特殊情况在某些情况下非常有用,在这种情况下,许多属性应该以类似的方式记录,而不必编写大量代码。

basic api符合属性,但除此之外,还可以自定义日志记录器、日志级别和日志条件。

用法示例:

  1. 简单的用法。 全部默认。 logger可从实例中重新使用,如果名称为loggerlog则使用内部高级描述符。logu on\u accesslogger:
importloggingclassTarget(object):definit(self,val='ok')self.val=valself.logger=logging.get_logger(self.__class__.__name__)# Single for class, follow subclassingdef__repr__(self):return"{cls}(val={self.val})".format(cls=self.__class__.__name__,self=self)@advanced_descriptors.LogOnAccessdefok(self):returnself.val@ok.setterdefok(self,val):self.val=val@ok.deleterdefok(self):self.val=""
  1. 与全局记录器一起用于类:
classTarget(object):definit(self,val='ok')self.val=valdef__repr__(self):return"{cls}(val={self.val})".format(cls=self.__class__.__name__,self=self)@advanced_descriptors.LogOnAccessdefok(self):returnself.val@ok.setterdefok(self,val):self.val=val@ok.deleterdefok(self):self.val=""ok.logger='test_logger'ok.log_level=logging.INFOok.exc_level=logging.ERRORok.log_object_repr=True# As by defaultok.log_success=True# As by defaultok.log_failure=True# As by defaultok.log_traceback=True# As by defaultok.override_name=None# As by default: use original name

测试

软件包高级描述符的主要测试机制是使用tox。 可用环境可通过tox-l

收集

CI系统

对于代码检查,多个ci系统并行使用:

  1. Travis CI:用于检查:pep8、pylint、bandit、安装可能性和单元测试。同时它还出版了关于工作服的报道。
  2. coveralls:用于显示覆盖率。
  3. Azure CI:用于windows上的功能测试。

CD系统

Travis CI:用于pypi上的包传递。

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

推荐PyPI第三方库


热门话题
java Jgit对于给定的存储库,我们如何确定新提交的列表,以及每个提交来自哪个分支?   从MS Access数据库添加java ComboBoxItem   如何禁止Java列表中不同类的实例?   java在没有Web的JAXR上使用Shiro过滤器。xml   由于java原因,无法在Ubuntu上安装Netbeans 8.2。awt。未找到恐怖和辅助技术   java JUnit对RuntimeException的处理(特别是)   java空集合在Apache CXF服务(JAXWS)中被转换为null   java CannotAcquireLockException问题   sql如何在数据库中对(Java)枚举建模(使用SQL92)   安卓在Java中获取友好url后面的文件名   java如何访问数组名以获取列表?   javascript Java Nashorn longBitsToDouble   java控制台<init>错误   java将一个LinkedList追加/连接到另一个LinkedList的最有效方式是什么?   Java for正在跳过的循环   java帮助创建带有动画的复杂Swing GUI   java Android编辑文本。setHint在片段中不工作