1 问题
在继承问题中,我们可以怎么使用super函数呢?
2 方法
super() 函数是用于调用父类(超类)的一个方法,目的是用来解决多重继承时父类的查找问题。Python中类的初始化都是init(), 所以父类和子类的初始化方式都是init(), 但是如果子类初始化时没有这个函数,那么他将直接调用父类的init(); 如果子类指定了init(), 就会覆盖父类的初始化函数init()需要在子类中显示地通过super()来调用父类的init()函数。
代码清单 1
class Animal: def __init__(self): self.name = 'animal' self.role = 'parent' print('I am father') class Dog(Animal): def __init__(self): print('I am son') self.name = 'dog' super(Dog,self).__init__() animal = Animal() wangcai = Dog() print(wangcai.name) print(wangcai.role) |
代码清单 2
class Base(object): def __init__(self): print('Base create') class Child1(Base): def __init__(self): print('Enter 1') super(Child1,self).__init__() print('Leave 1') class Child2(Base): def __init__(self): print('Enter 2') super(Child2,self).__init__() self.name = '2' print('Leave 2') class Child3(Child1,Child2): pass a = Child3() print(a.__class__.__mro__) |
3 结语
针对怎么利用super函数解决问题,在继承问题中,通过super函数在单继承和多类继承中的应用,证明super在继承中是一个很好的方法。super()用来继承基类的属性和方法;单继承时,super().__init__() 和 父类.__init__()实现的功能是类似的;super不是父类,而是继承顺序的下一个类;super()可以避免重复调用。子类永远在父类前面;如果有多个父类,会根据它们在列表中的顺序被检查;如果对下一个类存在两个合法的选择,选择第一个父类。