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

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以编程方式最小化JInternalFrame?   java使用JsonPath将不均匀列表提取为类型化对象   spring如何将java/resources文件获取到InputStream?   Java逻辑错误并不总是存在   java Firebase,更新特定字段   Java stream groupby并同时加入以进行csv导出   java安卓:如果出现任何声音,监听器将录制声音   java如何从多个文件中轮询最后修改的文件并发送到apache camel中的目标端点?   java是否返回多个比较器?   JavaBean IO:Date MMM在CAPS中不解析   当JButton从另一个类单击时,java正在更新JLabel   基类中子类的Java泛型初始化   jakarta ee Java ee制作一个以毫秒为间隔的计时器来发送数据包   json Windows Azure日期格式转换为Java日期