强制python类使用'\'u slots''

slotted的Python项目详细描述


https://github.com/brunonicko/slotted/workflows/MyPy/badge.svghttps://github.com/brunonicko/slotted/workflows/Lint/badge.svghttps://github.com/brunonicko/slotted/workflows/Tests/badge.svghttps://badge.fury.io/py/slotted.svg

强制python类使用__slots__,并提供pickling功能。在

示例

{1{1$在定义^ 2类时假定没有 空插槽,相当于声明__slots__ = ()。在

>>>fromslottedimportSlotted>>>classFoo(Slotted):...pass# implicit declaration of __slots__ = ()...>>>foo=Foo()>>>foo.bar=1Traceback(mostrecentcalllast):AttributeError:'Foo'objecthasnoattribute'bar'

时隙类具有酸洗支持:

^{pr2}$

时隙类可以与常规类混合,只要它们和它们的所有基 实现__slots__。在

>>>fromslottedimportSlotted>>>classBar(object):...__slots__=("bar",)>>>classFoo(Bar,Slotted):...__slots__=("foo",)...>>>foo=Foo()

如果链中任何非Slotted类没有实现__slots__,则 TypeError异常被引发。在

>>>fromslottedimportSlotted>>>classBar(object):...pass>>>classFoo(Bar,Slotted):...__slots__=("foo",)...Traceback(mostrecentcalllast):TypeError:base'Bar'doesnotenforce'__slots__'

Slotted行为也可以通过使用SlottedMeta元类来实现。在

>>>fromslottedimportSlottedMeta>>>fromsiximportwith_metaclass>>>classFoo(with_metaclass(SlottedMeta,object)):...pass# implicit declaration of __slots__ = ()...>>>foo=Foo()>>>foo.bar=1Traceback(mostrecentcalllast):AttributeError:'Foo'objecthasnoattribute'bar'

在python3中,Slotted可以与collections.abc类混合,而不需要任何类 问题。但是,这些类并没有在Python2中定义插槽。为了工作 这个限制,您可以使用自动转换的SlottedABC类,如下所示:

>>>fromcollectionsimportMapping>>>fromslottedimportSlottedMapping>>>issubclass(SlottedMapping,Mapping)True>>>classFooMapping(SlottedMapping):...__slots__=("_d",)...def__init__(self):...self._d={"a":1,"b":2}...def__getitem__(self,item):...returnself._d[item]...def__iter__(self):...forkeyinself._d:...yieldkey...def__len__(self):...returnlen(self._d)...>>>m=FooMapping()>>>isinstance(m,Mapping)True>>>print(m["a"])1>>>m.bar="foo"Traceback(mostrecentcalllast):AttributeError:'FooMapping'objecthasnoattribute'bar'

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

推荐PyPI第三方库


热门话题
java在Eclipse中使用ctrlshiftt而不是ctrlshiftr有什么好处?   java自动装箱概念SCJP   java如何使用JAXR和Resteasy、Angular和Wildfly10处理COR   java如何在整数数组中动态添加元素?   JAVA从继承生成器模式返回父对象继承   java问题调试生产者消费者问题   java MQ:已达到通道的最大实例数   JavaPowerMockMockito:我试图stubb的方法最终被调用   java Hibernate将多个列映射到一个表   在java中,将字符串中的单词大写,但跳过字符串中的数字和多余空格或符号   使用Eclipse将Java项目导出到JAR时出现“重复条目”错误   java使用eclipselink在实体表上指定NullConstraint   <Java>我可以在TCPIP中使用多个服务器socket吗?   带有自定义视图的java AlertDialog:调整大小以包装视图的内容   如何从用C#编写的web服务生成用于java的SOAP API?