** slots魔法:**
当我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定。
__slots__的限定只对当前类的对象生效,对子类并不起任何作用。
静态方法和类方法:
静态方法可解决对象未创建出来的问题。
案例:例如我们定义一个正方形类,通过四个边长来构造正方形,并提供计算面积的方法。
![](https://s1.51cto.com/images/blog/201908/08/2ca2a7c474f40623900a15a107d43eae.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](https://s1.51cto.com/images/blog/201908/08/ff881bca18b56ae64ef2722ac2e3037d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
定义类方法:
类方法的第一个参数约定名为cls,它代表的是当前类相关的信息的对象(类本身也是一个
对象,有的地方也称之为类的元数据对象),通过这个参数我们可以获取和类相关的信息并且可以创建
出类的对象。
案例:数字时钟
![](https://s1.51cto.com/images/blog/201908/08/2de35a85286477db58fcd97226a6d315.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](https://s1.51cto.com/images/blog/201908/08/7aa8438f32a645904a2d2fbcf4e5f34a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](https://s1.51cto.com/images/blog/201908/08/7ad7bb6f63c4003a499bdc385c2f0c55.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
继承和多态:
继承:追根溯源,可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。
多态:不同的子类对象会表现出不同的行为。
例(1)、通过继承计算两数之和。
![](https://s1.51cto.com/images/blog/201908/08/2a986d5dd7a99c3b08357a2297800e62.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
例(2)、带参继承。
![](https://s1.51cto.com/images/blog/201908/08/49b3367e7e6ef64784fc16dc72a71604.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
装饰器:
使用装饰器的时候,需要注意:
1. 装饰器名,函数名需要一致.
2. property需要先声明,再写setter,顺序不能倒过来
3. 如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
4. 如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器.
例:将前面的两数求和,函数本身第三个数乘上这个和。
![](https://s1.51cto.com/images/blog/201908/08/e109093e3e029ed65d481e7d8e337025.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
不定长参数
*args :位置传参。
![](https://s1.51cto.com/images/blog/201908/09/be6f1fb9b8f5688aeaf53c750314aa28.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
** kwargs:带参数名的传参。
![](https://s1.51cto.com/images/blog/201908/09/45102fb35f3ebecf8810b2e42108cafb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
不定长参数:
![](https://s1.51cto.com/images/blog/201908/09/3e167adaf7add2f95bbadc270575250b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
案例:装饰器带参数
![](https://s1.51cto.com/images/blog/201908/09/41cbcb21eb4e66f4dca6276a5194d9fc.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
生成器:
优点:节约内存空间。
缺点:计算速度慢,因为要生成。
![](https://s1.51cto.com/images/blog/201908/08/d09a5bc3a329a8fdf7ceea2162677bd6.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
列表生成式:
优点:计算速度快,因为一次性已经全部加载到内存中了,适合数据不是太大的情况10000-2000-
缺点:占用内存。
![](https://s1.51cto.com/images/blog/201908/08/d9d33c44d0fd68f3642a97705eccb23f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)