python类中super()的理解及使用

提前总结:

  •     继承的功能:父类的代码重用
  •     多态的功能:不同对象的同一方法会有相应包含父类方法的结果
  •     开闭原则:对扩展开放,对修改封闭
  •     super实现原理:通过c3算法,生成mro(method resolution order)列表,根据列表中元素顺序查询调用

  在类的继承中:返回绑定父类方法的途径-super
  子类的方法与父类冲突,又想调用父类方法时,需要使用super()函数

基本示例:不调用时,默认为父类方法的重写

class A:
    def do(self):
        print("A do")
class B(A):
    def do(self):
        super().do()
        print("B do")
b=B()
b.do()
>>> "A do"
>>> "B do"

  __init__特殊情况:不显示调用super(),父类__init__并不会调用

class A:
    def __init__(self,n):
        self.n=n
        print("A has",self.n)
class B(A):
    def __init__(self,n,m):
        super().__init__(n)
        self.m=m
        print("B has",m)
b=B(1,2)
>>> "A has 1"
>>> "B has 2"

多继承|钻石继承 特殊情况:

    class C(B,A,...): 
        pass
    从左向右,若B有基类优先基类执行,若继承自同一基类,相同方法只调用一次

一个用途:扩展list类,创建有名列表

class MyList(list):
     def __init__(self, a, title=''):
         super().__init__(a)
         self.title = title
     def infos(self):
        print("列表是:", self)
        print('列表名是:', self.title)

 

你可能感兴趣的:(python)