PEP487-更简单的类创建定制
pep487的Python项目详细描述
这是pep487简单定制类的一个后台 马丁·泰奇曼创作 对于3.6之前的python版本。
PEP487是免费软件:您可以重新发布和/或修改它 根据发布的GNU通用公共许可条款 由自由软件基金会,许可证的第3版, 或(由您选择)任何更高版本。
子类init
>>> from pep487 import PEP487Object >>> class FooBase(PEP487Object): ... foos = set() ... ... def __init_subclass__(cls, **kwargs): ... cls.foos.add(cls.__name__)
使用PEP487Object
作为foobase的所有子类
将它们的名称添加到公共类变量“foos”。
>>> class Foo1(FooBase): ... pass >>> class Foo2(FooBase): ... pass
因此:
>>> FooBase.foos {'Foo1', 'Foo2'}
物业名称和业主
如果类对象在声明时有方法__set_name__
在pep487对象类中,它将被称为:
>>> class NamedProperty: ... def __set_name__(self, owner, name): ... self.context = owner ... self.name = name
>>> class Bar(PEP487Object): ... foo = NamedProperty() ... bar = NamedProperty()
因此:
>>> Bar.foo.name is 'foo' and Bar.foo.context is Bar True >>> Bar.bar.name is 'bar' and Bar.bar.context is Bar True
抽象基类
因为PEP487Object
有一个自定义元类,所以它是不兼容的
去abc.ABC
。因此pep487
包含ABC
的修补版本
以及ABCMeta
。