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

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

推荐PyPI第三方库


热门话题
@SpringBootTest的java一次性配置   java如何在JSF中使用facelets创建左导航窗格?   [Java]检查一个数字是否为素数,使用extra-isPrime标志不起作用   关于java中的单线计算器的一个问题?   Java代码在Java环境中运行良好,但在Android环境中抛出错误   java使用int数组的元素初始化字符串   sqlquery中的mysql Java Hibernate常量   java在使用同一实例时从外部类调用内部类方法   中的java CriteriaBuilder   对JPA实体使用BaseEntity时,Sonar中的java“等于错误”   java获取数组的平均值   java ANDROID:在主细节流布局的另一个活动中更新数据   java如何使用SpringGateway以字符串形式获取响应体?   jsp中分页公告板的javasql