super函数使用基础
实际上,大家对于在Python中如何正确使用super()函数普遍知之甚少。你有时候会看到像下面这样直接调用父类的一个方法:
1 |
|
尽管对于大部分代码而言这么做没什么问题,但是在更复杂的涉及到多继承的代码中就有可能导致很奇怪的问题发生。比如,考虑如下的情况:
1 |
|
如果你运行这段代码就会发现Base.init()被调用两次,如下所示:
1 |
|
可能两次调用Base.init()没什么坏处,但有时候却不是。另一方面,假设你在代码中换成使用super(),结果就很完美了:
1 |
|
运行这个新版本后,你会发现每个init()方法只会被调用一次了:
1 |
|
记一下这个:
1 |
|
1 |
|
1 |
|
super函数使用 LR举例
1 |
|
装饰器
装饰器详解可参照basic文档
a. @classmethod: 不需要self参数,但第一个参数需要是表示自身类的cls参数
1 |
|
b. @staticmethod: 不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样
1 |
|
1 |
|
1 |
|
单例模式
1 |
|
1 |
|
好像写一个装饰器@singleton也行