特别案件高级描述员。

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组织。openqa。硒。遥远的UnreachableBrowserException如何定义EXE路径?   java Camel AdviceWith不使用指定文件替换端点   基于字符串的java图像加载   Java中的启发式算法,计算8个谜题状态的线性冲突   java为什么不支持文件。probeContentType返回null   JPA@EntityListeners、@PrePersist和Spring@RepositoryEventHandler、@HandleBeforeSave之间的java差异   可能前缀的Java字符串到字符串[]   安装rJava | Makefile时发生java错误。全部:38:target’libjri的配方。所以他失败了   Java公共静态void main()   java如何覆盖txt文件中的某些单词   java如何获得循环中生成的字符值之和?   java Log4j创建另一个具有相同属性的appender   java如何在从Axis2 Web服务客户端通过代理服务器调用Web服务时设置代理设置?   在Windows上安装Elasticsearch时发生java错误   java如何向EditText组件添加TextChangedListener?