设为首页 加入收藏

TOP

python学习笔记:第20天 多继承、MRO C3算法(二)
2018-11-14 20:08:27 】 浏览:226
Tags:python 学习 笔记 继承 MRO 算法
深度遍历就可以了

四、super

super()可以帮我们执?MRO中下?个?类的?法,通常super()有两个使?的地?:

  1. 可以访问?类的构造?法
  2. 当?类?法想调??类(MRO)中的?法
  • super的使用方法:
class super(object)
 |  super() -> same as super(__class__, <first argument>)
 |  super(type) -> unbound super object
 |  super(type, obj) -> bound super object; requires isinstance(obj, type)

我们先来看第一种情况:子类访问父类的构造方法:

class A:
    def __init__(self, a, b):
        self.a = a
        self.b = b
        
class B(A):
    def __init__(self, a, b, c, d):
        super(B, self).__init__(a, b)           # 访问父类的构造方法
        self.c = c
        self.d = d
b = B(1, 2, 3, 4)
print(b.__dict__)

# 结果:
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

第二种情况:?类?法想调??类(MRO)中的?法

class D:
    def func(self):
        print('我是D类的func')
        
class E:
    def func(self):
        print('我是E类的func')
        
class C(E):
    def func(self):
        print('我是C类的func')

class B(D):
    def func(self):
        print('我是B类的func1')
        super
class A(B, C):
    def func(self):
        super().func()
    def func2(self):
        super(D, self).func()                   #  这里可以直接调用MRO中super指定类的下一个类中的方法,即C中的func方法

# A的MRO顺序为: A -> B -> D -> C -> E

a = A()
a.func()
# 我是B类的func1

a.func2()
# 我是C类的func

super的使用:

  • super()super(cls, object).functions的调用是一样的(cls是指调用super方法的那个类,不是指定另一个类而是类本身)
  • super(cls, object).functions可以指定cls,让super调用MRO中指定类的下一个类的方法(上面就是一个很好的例子)

注意:不管super()写在哪?,在哪?执?,?定先找到MRO列表,根据MRO列表的顺序往下找,否则?切都是错的

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【Python3爬虫】拉勾网爬虫 下一篇django配置发送邮箱

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目