zoukankan      html  css  js  c++  java
  • super

    # 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
    
    
    
    '''
    MRO: method resolution order
    Incr,Pro,Add2,Mult,HaHa,Init,Object
    
    super()
    a = Incr()
    a.chi()
    '''
    
    # # print(Incr.__mro__)
    # # Incr Pro Add2 Mult HaHa Init
    # p = Incr(5) # p.val = 8.0
    # # Add2
    # # Mult
    # # 哈哈
    # # init
    # # 5.0
    # # 8.0
    # print(p.val)
    #
    c = Add2(2) # Add2, Init, Object c.val = 2
    # Add2
    # init
    # 2
    # 4
    
    print(c.val) # 4
    #
    

      

  • 相关阅读:
    Oracle 11g系列:函数与存储过程
    Oracle 11g系列:视图
    Oracle 11g系列:约束
    Oracle 11g系列:数据表对象
    Oracle 11g系列:数据库
    Oracle 11g系列:SQL Plus与PL/SQL
    Ext.util.TaskRunner定时执行任务
    MS SQL Server存储过程
    UML基础:用例图Use Case Diagram(1)
    UML基础系列:类图
  • 原文地址:https://www.cnblogs.com/work14/p/10187583.html
Copyright © 2011-2022 走看看