类和元类,以便更容易地处理“插槽”。

autoslot的Python项目详细描述


https://img.shields.io/badge/stdlib--only-yes-green.svghttps://travis-ci.org/cjrh/autoslot.svg?branch=masterhttps://coveralls.io/repos/github/cjrh/autoslot/badge.svg?branch=masterhttps://img.shields.io/pypi/pyversions/autoslot.svghttps://img.shields.io/github/tag/cjrh/autoslot.svghttps://img.shields.io/badge/install-pip%20install%20autoslot-ff69b4.svghttps://img.shields.io/pypi/v/autoslot.svghttps://img.shields.io/badge/calver-YYYY.MM.MINOR-22bfda.svg

自动批次

自动“插槽”。

演示

fromautoslotimportSlotsclassCompact(Slots):def__init__(self,a,b):self.x=aself.y=b

这将产生完全的类,就像您已经完成了一样:

classCompact:__slots__={'x','y'}def__init__(self,a,b):self.x=aself.y=b

简单:扫描__init__()中的代码以查找所有分配 添加到self上的属性,这些属性被添加为__slots__

使用autoslot.Slots而不是手动插槽声明的好处是 你可以修改 在__init__()方法中添加更多属性的代码,以及 更改将自动反映在__slots__定义中。

你也可以拥有两个世界中最好的:你期望的领域的插槽, 以及a__dict__对于那些您没有:

fromautoslotimportSlotsPlusDictclassSemiCompact(SlotsPlusDict):def__init__(self,a,b):self.x=aself.y=binst=SemiCompact(1,2)inst.z=123# <-- This won't fail!

属性xy将存储在插槽中,而所有其他属性 动态分配的属性将进入通常的__dict__实例 在教室里。如果类的大多数属性出现在__init__() 方法(这些将成为插槽),然后字典导致的空间膨胀 哈希表扩展将只包含动态分配的 属性。

它是如何工作的?

你自己看看!代码很小。

换句话说:元类找到__init__()方法(如果存在),并且 访问其字节码。它查找对属性的所有赋值 self,并将这些视为所需的__slots__项。然后 元类将__slots__注入类定义的命名空间 然后允许类创建正常进行。

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

推荐PyPI第三方库


热门话题
java LineNumberReader。如果查询行为不正确,则返回readLine()   java包含了一个使用AndroidX的工具栏,这让我的应用程序崩溃了   JVM设置通过“java jar”运行应用程序的最佳实践   java如何获取ImageButton宽度   java Oracle SQLLDR实用程序无响应   列出Java获取对象的arrayList中最常见的元素   java使用带有FlowLayout的getContentpane对布局应用更改,但不起作用为什么?   在java中,我可以在画布上绘制画布吗?   编译游戏代码时发生java异常错误   从firestore获取java Webview失败   java将TableLayout中单元格的内容向右对齐   java无法在发布模式下启动活动(使用proguard安卓optimize配置)   java允许在线程期间进行GUI更新。睡觉   java如何对以变量为列表的列表进行排序   API URL上的java Google云端点异常