Python类中super()和__init__()的关系
1.单继承时super()和__init__()实现的功能是类似的
复制代码
class Base(object):
def init(self):
print ‘Base create’
class childA(Base):
def init(self):
print 'creat A ',
Base.init(self)
class childB(Base):
def init(self):
print 'creat B ',
super(childB, self).init()
base = Base()
a = childA()
b = childB()
#输出:
Base create
creat A Base create
creat B Base create
复制代码
使用super()继承时不用显式引用基类。
2. super()只能用于新式类中。
把基类改为旧式类,即不继承任何基类
复制代码
class Base():
def init(self):
print ‘Base create’
#执行时,在初始化b时就会报错
super(childB, self).init()
TypeError: must be type, not classobj
复制代码
3. super不是父类,而是继承顺序的下一个类
在多重继承时会涉及继承顺序,super()相当于返回继承顺序的下一个类,而不是父类,类似于这样的功能:
复制代码
def super(class_name, self):
mro = self.class.mro()
return mro[mro.index(class_name) + 1]
#mro()用来获得类的继承顺序。
例如:
class Base(object):
def <