Python学习笔记——__slots__

来源:互联网 发布:如何做好业务员知乎 编辑:程序博客网 时间:2024/05/22 04:34

今天周末简单的说一下slots这个东西。

我们上次说了,Python是动态语言,是可以动态添加类和对象的属性的,利用对象名/类名.属性名 = types.MethodType(方法名,对象名/类名)动态为类或者对象添加方法。

slots对动态添加对象属性的影响

我们可以在构造类的时候做一些限制。

我们看一个例子。

这里写图片描述

这是我们上次说的,动态添加类属性与对象属性。

添加了一个对象属性name一个类属性age

然后在对象中可以直接调用。

假如说,我利用类的私有属性slots标记下只能够动态创建属性名为name的属性。

这里写图片描述

只能拥有name属性,当为对象动态添加age的时候程序就挂了。

可见slots对对象属性的添加是起限制作用的。

slots对动态添加类属性的影响

这里写图片描述

我们直接为类添加属性,是没有问题的,对象也会拥有类的这个属性,并且调用name,age都没有问题

可见slots对类属性的添加是不起作用的。

slots对动态添加对象方法的影响

下面我们动态添加一下对象方法。

这里写图片描述

由上图我们看出,slots对动态添加对象方法也是有限制作用的。

slots对动态添加类方法的影响

这里写图片描述

上图我们添加了类属性xiaoming,然后添加了类方法run,后创建对象,利用对象调用run()方法也是可行的

可见slots对动态添加类方法有没有影响。


总结

在构造类的时候写入私有属性

slots = (‘属性名’)

这就意味着,这个类生成的对象,在动态添加元素的时候只能够添加元祖中的元素名。从而限制对象的动态添加元素行为。

添加类元素,完全不受它的影响。

原创粉丝点击