利用super解决问题

2024-05-10 14:00:43 浏览数 (2)

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()可以避免重复调用。子类永远在父类前面;如果有多个父类,会根据它们在列表中的顺序被检查;如果对下一个类存在两个合法的选择,选择第一个父类。

0 人点赞