1 问题
在继承问题中,我们可以怎么使用super函数呢?
2 方法
super() 函数是用于调用父类(超类)的一个方法,目的是用来解决多重继承时父类的查找问题。Python中类的初始化都是init(), 所以父类和子类的初始化方式都是init(), 但是如果子类初始化时没有这个函数,那么他将直接调用父类的init(); 如果子类指定了init(), 就会覆盖父类的初始化函数init()需要在子类中显示地通过super()来调用父类的init()函数。
代码清单 1
代码语言:txt复制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
代码语言:txt复制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()可以避免重复调用。子类永远在父类前面;如果有多个父类,会根据它们在列表中的顺序被检查;如果对下一个类存在两个合法的选择,选择第一个父类。