python中的super函数

不管我本人多么平庸,我总觉得对你的爱很美。
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()就不用一个一个改了(只需类定义中改一改就好了)