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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值