• super


    super() 找MRO顺序的下一个
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    # class Base1:
    #     def chi(self):
    #         print("我是可怜的Base1")
    #
    # class Base2:
    #     def chi(self):
    #         print("我是可怜的Base2")
    #
    # class Base3:
    #     def chi(self):
    #         print("我是可怜的Base3")
    #
    # class Bar(Base1, Base2, Base3):
    #     def chi(self):
    #         print("我是Bar里面的吃1")
    #         # super(类名, self) 从某个类开始找下一个MRO
    #         super(Base2, self).chi() # 此时调用的super. 在Bar调用 -> super表示找MRO里的下一个
    #         # super().chi() # super(Bar, self).chi()
    #         print("我是Bar里面的吃2")
    #
    # b = Bar() # Bar, Base1, Base2, Base3, object
    # b.chi()
    # print(Bar.__mro__)
     
     
    # class Base1:
    #     def chi(self):
    #         super().chi() # super找的是MRO的下一个.
    #         print("我是可怜的Base1")
    #
    # class Base2:
    #     def chi(self):
    #         super().chi()
    #         print("我是可怜的Base2")
    #
    # class Base3:
    #     def chi(self):
    #         print("我是可怜的Base3")
    #
    # class Bar(Base1, Base2, Base3):
    #     def chi(self):
    #         print("我是Bar里面的吃1")
    #         # super(类名, self) 从某个类开始找下一个MRO
    #         super(Bar, self).chi() # 此时调用的super. 在Bar调用 -> super表示找MRO里的下一个
    #         # super().chi() # super(Bar, self).chi()
    #         print("我是Bar里面的吃2")
    #
    # b = Bar() # 报错 Base1 object
    # b.chi() # 报错
    # # 坑
     
     
     
    # MRO + super ⾯试题
    class Init(object):
        def __init__(self, v): # 2
            print("init")
            self.val = v
     
    class Add2(Init):
        def __init__(self, val): # 2
            print("Add2")
            super(Add2, self).__init__(val) # Mult
            print(self.val)
            self.val += 2
     
    class Mult(Init):
        def __init__(self, val):
            print("Mult")
            super(Mult, self).__init__(val) # Haha
            self.val *= 5
     
    class HaHa(Init):
       def __init__(self, val):
            print("哈哈")
            super(HaHa, self).__init__(val) # Init
            self.val /= 5
     
    class Pro(Add2,Mult,HaHa): #
        pass
     
    class Incr(Pro): # incr->pro->add2->Mult->HaHa->init
        def __init__(self, val): # 5
            super(Incr, self).__init__(val) # Add2
            self.val += 1
     
    # Add2
    # Mult
    # 哈哈
    # init
    # 5.0
    # 8.0
     
     
     
    # Add2
    # init
    # 2
    # 4

      

  • 相关阅读:
    Linux课程实践一:Linux基础实践(SSH)
    《恶意代码分析实战》读书笔记 静态分析高级技术一
    Linux课程实践四:ELF文件格式分析
    Linux课程实践三:简单程序破解
    Linux课程实践二:编译模块实现内核数据操控
    2020.12.19 加分项和课程意见/建议
    博客已换
    [题解] LuoguP4983 忘情
    [题解] LuoguP4767 [IOI2000]邮局
    [题解] LuoguP2791 幼儿园篮球题
  • 原文地址:https://www.cnblogs.com/heheda123456/p/10204830.html
Copyright © 2020-2023  润新知