特别案件高级描述员。
Advanced-Descriptors的Python项目详细描述
高级描述符
此套餐包括特殊情况下的助手:
- 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,则应在元类中使用标准属性。
用法示例:
- 除了普通属性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
- 例如,也可以使用类范围的getter:
classTarget(object):_value=1val=advanced_descriptors.AdvancedProperty()@val.cgetterdefval(cls):returncls._value
注意
类范围的getter接收类作为参数。默认情况下,IDE不知道自定义描述符和替换项。
登录访问
属性的这种特殊情况在某些情况下非常有用,在这种情况下,许多属性应该以类似的方式记录,而不必编写大量代码。
basic api符合属性,但除此之外,还可以自定义日志记录器、日志级别和日志条件。
用法示例:
- 简单的用法。 全部默认。 logger可从实例中重新使用,如果名称为logger或log则使用内部高级描述符。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=""
- 与全局记录器一起用于类:
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系统并行使用:
- Travis CI:用于检查:pep8、pylint、bandit、安装可能性和单元测试。同时它还出版了关于工作服的报道。
- coveralls:用于显示覆盖率。
- Azure CI:用于windows上的功能测试。
CD系统
Travis CI:用于pypi上的包传递。