特殊情况的先进描述符。
项目描述
高级描述符
此包包括特殊情况的辅助工具
SeparateClassMethod - 允许同时存在具有相同名称的classmethod和普通方法。
AdvancedProperty - 具有设置类范围getter的属性的属性。
LogOnAccess - 在成功get/set/delete或失败时进行日志记录的属性。
SeparateClassMethod
此描述符可以使用标准装饰器语法设置。创建具有参数的实例
def imeth(instance):
return instance.value
def cmeth(owner):
return owner.value
class Target(object):
value = 1
def __init__(self):
self.value = 2
getval = advanced_descriptors.SeparateClassMethod(
imeth, cmeth
)
创建作为装饰器包装的实例
class Target(object):
value = 1
def __init__(self):
self.value = 2
@advanced_descriptors.SeparateClassMethod
def getval(self):
return self.value
@getval.class_method
def getval(cls):
return cls.value
只有方法和只有classmethod的情况是无用的:在这种情况下应使用方法本身和@classmethod。
AdvancedProperty
在需要类getter的情况下,除了普通属性API之外,应使用此描述符。如果还需要类范围的setter和deleter,则应在元类中使用标准属性。
使用示例
除了常规属性API之外
class Target(object): _value = 777 def __init__(self): self._value = 42 @advanced_descriptors.AdvancedProperty def val(self): return self._value @val.setter def val(self, value): self._value = value @val.deleter def val(self): self._value = 0 @val.cgetter def val(cls): return cls._value
还可以使用类的getter方法来获取实例
class Target(object): _value = 1 val = advanced_descriptors.AdvancedProperty() @val.cgetter def val(cls): return cls._value
LogOnAccess
这种属性的特殊情况在需要以类似方式记录许多属性而无需编写大量代码的情况下很有用。
基本API符合property规范,但还可以自定义记录器、日志级别和日志条件。
使用示例
简单用法。默认全部。如果实例中存在名称为logger或log的记录器,则重用实例中的记录器,否则使用内部的advanced_descriptors.log_on_access记录器
import logging class Target(object): def init(self, val='ok') self.val = val self.logger = logging.get_logger(self.__class__.__name__) # Single for class, follow subclassing def __repr__(self): return "{cls}(val={self.val})".format(cls=self.__class__.__name__, self=self) @advanced_descriptors.LogOnAccess def ok(self): return self.val @ok.setter def ok(self, val): self.val = val @ok.deleter def ok(self): self.val = ""
与类的全局记录器一起使用
class Target(object): def init(self, val='ok') self.val = val def __repr__(self): return "{cls}(val={self.val})".format(cls=self.__class__.__name__, self=self) @advanced_descriptors.LogOnAccess def ok(self): return self.val @ok.setter def ok(self, val): self.val = val @ok.deleter def ok(self): self.val = "" ok.logger = 'test_logger' ok.log_level = logging.INFO ok.exc_level = logging.ERROR ok.log_object_repr = True # As by default ok.log_success = True # As by default ok.log_failure = True # As by default ok.log_traceback = True # As by default ok.override_name = None # As by default: use original name
测试
该包 advanced-descriptors 的主要测试机制是使用 tox。可以通过 tox -l 收集可用环境。
CI系统
对于CI/CD,使用GitHub actions
GitHub actions:用于检查:PEP8、pylint、bandit、安装可能性以及单元测试。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
advanced-descriptors-4.0.3.tar.gz (18.1 kB 查看哈希值)
构建分发
关闭
哈希值 for advanced_descriptors-4.0.3-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 433fa4bbd21c099a7c0f60d5777efde6e3a4b088d7d68e679e1c5a02bd95a78c |
|
MD5 | 6ed7c5958b2bca05c59d76c524ebdbe8 |
|
BLAKE2b-256 | a4e41aa2b3aed1ae5f785c27d1bfbf13900c06555919e4361c65818e2d800b2f |