与任何类共享相同的属性。
class-propert的Python项目详细描述
安装
pip install class_property
公用事业
- class_value - Hold a single value for a class and all instances.
- class_property - Like a property, but works on MyClass.class_prop = value
- metaclass - Create a metaclass that looks for class_value and class_property to register them.
- decorate - Decorate a class to register any class_value and class_property.
类必须使用元类或装饰函数。子类不需要使用decorate或元类。 元类是类对象如何与描述符一起工作的。在
跑
类值用法。在
示例:
^{pr2}$类属性用法。在
示例:
fromclass_propertyimportclass_value,class_property,decorate,metaclassglobalGLOBGLOB='Hello'defget_glob():"""Return the global GLOB value"""globalGLOBreturnGLOBdefset_glob(value):globalGLOBGLOB=value# doesn't matter if class_value.decorate, class_property.decorate, or decorate (same with metaclass)classMyClass(object,metaclass=metaclass()):_VALUE=None@class_propertydefvalue(self):returnMyClass._VALUE@value.setterdefvalue(self,value):MyClass._VALUE=value# Also works with no arguments@class_propertydefvalue2():returnMyClass._VALUE@value2.setterdefvalue2(value):MyClass._VALUE=valueglob=class_property(get_glob,set_glob)mc=MyClass()assertmc.valueisNoneassertMyClass.valueisNoneMyClass.value=3assertmc.value==3assertMyClass.value==3mc.value=2assertmc.value==2assertMyClass.value==2assertmc.value2==2assertMyClass.value2==2mc.value2=5assertmc.value==5assertMyClass.value==5assertmc.value2==5assertMyClass.value2==5assertMyClass.glob=='Hello'assertmc.glob=='Hello'MyClass.glob='Jack'assertMyClass.glob=='Jack'assertmc.glob=='Jack'mc.glob='Jill'assertMyClass.glob=='Jill'assertmc.glob=='Jill'classSubClass(MyClass):passsub=SubClass()sub.glob='John'assertSubClass.glob=='John'assertsub.glob=='John'assertMyClass.glob=='John'assertmc.glob=='John'
- 项目
标签: