不管我本人多么平庸,我总觉得对你的爱很美。
super有三种用法, 第一参数总是召唤父类的那个类, 第二参数可缺(返回非绑定父类对象),也可以是实例对象或该类的子类. 最终返回的都是父类的实例(绑定或非绑定). 在Python3中,super函数多了一种用法是直接super(),相当于super(type,首参), 这个首参就是一般的传入的self实例本身啦. 因为在py2里面常用也是这种写法.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class A(object): def __init__(self): print("inter A") print("leave A") def demo(self): print("demo A")
class B(A): def __init__(self): print("enter B") super(B, self).__init__() super(B, self).demo()
b = B() print(b)
|
以上代码还可以这样写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class A(object): def __init__(self): print("inter A") print("leave A") def demo(self): print("demo A")
class B(A): def __init__(self): print("enter B") A.__init__(self) A.demo(self)
b = B() print(b)
|
如果没有多继承, super其实和通过父类来调用方法差不多. 但, super还有个好处: 当B继承自A, 写成了A.__init__, 如果根据需要进行重构全部要改成继承自 E,那么全部都得改一次! 这样很麻烦而且容易出错! 而使用super()就不用一个一个改了(只需类定义中改一改就好了)