zoukankan      html  css  js  c++  java
  • python_super()及继承顺序

    class A(object):
        def func(self):
            print('A')
    class B(A):
        def func(self):
            super().func()
            print('B')
    class C(A):
        def func(self):
            super().func()
            print('C')
    class D(B,C):
        def func(self):
            super().func()
            # super(D,self).func()   # python 2的新式类要求super必须把类名和self传进去。python3也支持这种写法。
            print('D')
    
    print(D.mro())  # [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
    D().func()  # A C B D   从 mro顺序的最顶端开始执行
    
    # super是按照mro顺序来寻找当前类的下一个类
    # 在py3中不需要传参数,自动就帮我们寻找当前类的mro顺序的下一个类中的同名方法
    # 在py2中的新式类中,需要我们主动传递参数super(子类的名字,子类的对象).函数名()
    # 这样才能够帮我们调用到这个子类的mro顺序的下一个类中的方法
    # 在py2的经典类中,并不支持使用super来找下一个类
    
    # 在D类中找super的func,那么可以这样写 super().func()
    # 也可以这样写 super(D,self).func() (并且在py2的新式类中必须这样写)
    
    # 在单继承的程序中,super就是找父类
    class User:
        def __init__(self,name):
            self.name = name
    class VIPUser(User):
        def __init__(self,name,level,strat_date,end_date):
            User.__init__(self,name)  # 无论有没有继承,这种写法都可以执行。
            # super(VIPUser,self).__init__(name)
            # super().__init__(name)              # 推荐的
            self.level = level
            self.strat_date = strat_date
            self.end_date = end_date
    
    太白 = VIPUser('太白',6,'2019-01-01','2020-01-01')
    print(太白.__dict__)
    
  • 相关阅读:
    echo和tee的使用
    cut列的截取
    BZOJ1414: [ZJOI2009]对称的正方形(二维hash)
    BZOJ1010: [HNOI2008]玩具装箱toy
    BZOJ2588: Spoj 10628. Count on a tree(主席树)
    BZOJ3991: [SDOI2015]寻宝游戏(set+lca / 虚树)
    BZOJ2286: [Sdoi2011]消耗战(虚树)
    Linux
    奇妙的棋盘(建图+搜索)
    礼物(动态规划)
  • 原文地址:https://www.cnblogs.com/Collin-pxy/p/13034434.html
Copyright © 2011-2022 走看看