强制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 Spring启动启用HTTPS   actionscript 3 java中的这个[“var”+“name”]   java只匹配给定集合中一个字符的一个匹配项   java Hibernate:防止角色表中出现多个相同的条目   javajersey+Spring注入servlet请求   java HtmlEditor javafx失去焦点   java Apache Wicket AjaxRequestTarget ListView组件未刷新或更新   mysql java。无法将lang.String转换为java。sql。时间戳   java将巨大的整数文件(在一行中)拆分为具有内存限制的已排序块   安卓如何完全关闭proguard?   安装Eclipse和Android SDK后的java“无AVD可用”消息   java动态显示图像视图   java在Spring中还有哪些WebsocketClient实现?   java Glassfish需要很长时间才能重新启动   使用Java简单串行连接器将pc与arduino连接   java如何在camel文件组件配置中结合readLockCheckInterval和maxMessagesPerPoll?   单击Android时的java预览图像   java如何将字节数组转换为ByteArrayOutputStream