欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MRO + super面试题(详解)

程序员文章站 2022-05-02 07:53:00
super(类名, self) 从某个类开始找下一个MRO 第一步: 先找一下整个程序的MRO 用c3算法查找: 查找顺序如上,知道了执行顺序就可以按流程执行了 ......
class init(object):
    def __init__(self, v): 
        print("init")
        self.val = v

class add2(init):
    def __init__(self, val): 
        print("add2")
        super(add2, self).__init__(val)
        print(self.val)
        self.val += 2

class mult(init):
    def __init__(self, val):
        print("mult")
        super(mult, self).__init__(val) 
        self.val *= 5

class haha(init):
   def __init__(self, val):
        print("哈哈")
        super(haha, self).__init__(val)
        self.val /= 5

class pro(add2,mult,haha):    pass

class incr(pro): 
    def __init__(self, val): 
        super(incr, self).__init__(val) 
        self.val += 1

p = incr(5)
print(p.val)

c = add2(2)
print(c.val)

super(类名, self) 从某个类开始找下一个mro

第一步:

  先找一下整个程序的mro

  用c3算法查找:

MRO + super面试题(详解)

查找顺序如上,知道了执行顺序就可以按流程执行了