属性变量的集合

more-properties的Python项目详细描述


more_properties

property变体的集合。

基本用途

变体的行为基本上是内置的property,除非另有说明。

考虑到以下类别

frommore_propertiesimportproperty,class_property,static_propertyclassParrot:@propertydefname(self):return"Fred"@class_propertydeforder(cls):returnPsittaciformes@static_propertydefplanet():returnEarth

属性的访问方式如下:

^{pr2}$

设置者/删除者

setter和deleter的定义方式与内置的property相同。 或者使用decorator方法

frommore_propertiesimportclass_propertyclassFoo:name="Foo"@class_propertydefidentifier(cls):"""Object identifier"""returncls.name.lower()@identifier.setterdefidentifier(cls,value):cls.name=value.title()@identifier.deleterdefidentifier(cls):cls.name=None

或者内联方法

frommore_propertiesimportclass_propertyclassFoo:name="Foo"@classmethoddefget_identifier(cls):returncls.name.lower()@classmethoddefset_identifier(cls,value):cls.name=value.title()@classmethoddefdel_identifier(cls):cls.name=Noneidentifier=class_property(get_identifier,set_identifier,del_identifier,"Object identifier")

参考文献

property

内置^{}的修改版本。

总是表现得像个 data descriptor, 不管设置了哪个getter、setter和deleter。

在类上访问时的行为是未定义的。

class_property

类的propertycls.x和{}都使用类调用getter。 设置instance.x调用具有类和值的setter。 删除instance.x只使用类调用删除器。

frommore_propertiesimportclass_propertyclassFoo:@class_propertydefidentifier(cls):"""Class identifier"""returncls.__name__.lower()classBar(Foo):pass
>>> Foo.identifier'foo'>>> Foo().identifier'foo'
>>> Bar.identifier'bar'>>> Bar().identifier'bar'

classproperty作为同义词提供,以与classmethod保持一致。

static_property

独立于其访问器的propertycls.x和{}都不带参数地调用getter。 设置instance.x只使用值调用setter。 删除instance.x不带参数调用删除器。

frommore_propertiesimportstatic_propertyx="bar"classFoo:@static_propertydefval():returnx
>>> Foo.val'bar'>>> Foo().val'bar'

staticproperty作为同义词提供,以与staticmethod一致。

cached_property

cached_class_property

cached_static_property

分别是propertyclass_property和{}的变体。

它们的使用方法与原版相同, 但要缓存getter的值。

fromdataclassesimportdataclassfrommore_propertiesimportcached_property@dataclassclassFoo:x:int@cached_propertydefy(self):print("Doing work")returnself.x+1
>>> bar=Foo(1)>>> bar.yDoing work2>>> bar.y2

如果定义了setters/deleters, 然后在调用它们之前清除缓存。

此外,可以通过clear_cache方法显式清除缓存, 仅在类创建期间公开。

@dataclassclassFoo:x:int@cached_propertydefy(self):print("Doing work")returnself.x+1y_clear_cache=y.clear_cache
>>> bar=Foo(1)>>> bar.yDoing work2>>> bar.y2>>> bar.y_clear_cache()>>> bar.yDoing work2

安装

使用标准Python包管理器pip安装和更新:

pip install more_properties

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

推荐PyPI第三方库


热门话题
javascript如何找到socket。同一局域网上的IO服务器?   将Java代码格式化为Word/RTF格式   java学习对象以及如何将分配的变量封装到私有变量   java Websocket客户端不在Tomcat中工作   java如何在点击按钮时打开本机表情键盘?   java使用哪个Maven GlassFish插件?   Eclipse Java构建路径不允许添加外部JAR   继承Java6集合。勾选适当的用法   JavaApacheDateUtils:使用多个模式解析日期   java hibernate如何生成查询?   具有id或链接的java Dropbox下载文件或文件夹   java模态对话框未在PrimeFaces 5上显示   java将类对象转换为人类可读的字符串   更新数据库中字段的java通用方法   java无法通过Apache Tomcat访问网络文件夹