今天周末简单的说一下slots这个东西。
我们上次说了,Python是动态语言,是可以动态添加类和对象的属性的,利用对象名/类名.属性名 = types.MethodType(方法名,对象名/类名)动态为类或者对象添加方法。
slots对动态添加对象属性的影响
我们可以在构造类的时候做一些限制。
我们看一个例子。
这是我们上次说的,动态添加类属性与对象属性。
添加了一个对象属性name一个类属性age
然后在对象中可以直接调用。
假如说,我利用类的私有属性slots标记下只能够动态创建属性名为name的属性。
只能拥有name属性,当为对象动态添加age的时候程序就挂了。
可见slots对对象属性的添加是起限制作用的。
slots对动态添加类属性的影响
我们直接为类添加属性,是没有问题的,对象也会拥有类的这个属性,并且调用name,age都没有问题
可见slots对类属性的添加是不起作用的。
slots对动态添加对象方法的影响
下面我们动态添加一下对象方法。
由上图我们看出,slots对动态添加对象方法也是有限制作用的。
slots对动态添加类方法的影响
上图我们添加了类属性xiaoming,然后添加了类方法run,后创建对象,利用对象调用run()方法也是可行的
可见slots对动态添加类方法有没有影响。
总结
在构造类的时候写入私有属性
slots = (‘属性名’)
这就意味着,这个类生成的对象,在动态添加元素的时候只能够添加元祖中的元素名。从而限制对象的动态添加元素行为。
添加类元素,完全不受它的影响。