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
    #
    

      

  • 相关阅读:
    关于 var YAHOO = window.YAHOO || {}; 的解释
    javacsript 上传文件(与websrvice对接)原创
    Jquery ajax参数设置
    分页存储过程(对有主键的表效率极高) ,以及在asp.net中配合LtpPageControl的用法
    一些常用的dos命令
    SQL字符串函数
    (转)UML建模风格之状态图概要
    (转)也谈设计模式,实例票据打印 解析 Decorator
    (转)UML建模风格之状态图详述
    JQuery find方法Bug
  • 原文地址:https://www.cnblogs.com/work14/p/10187583.html
Copyright © 2011-2022 走看看