zoukankan      html  css  js  c++  java
  • python 带参数的多重继承

    1. 不带参数的多重继承

    # 作者:hhh5460
    # 时间:2017.07.18
    
    class A(object):
        def show_x(self):
            print('A')
            
            
    class B(object):
        def show_y(self):
            print('B')
            
            
    class C(object):
        def show_z(self):
            print('C')
            
            
    class D(A, B, C):
        pass
            
            
    # 测试
    if __name__ == '__main__':
        d = D()
        d.show_x() # A
        d.show_y() # B
        d.show_z() # C
    

    2. 带参数的多重继承

    # 作者:hhh5460
    # 时间:2017.07.18
    
    class A(object):
        def __init__(self, x=0):
            self._x = x
        
        def show_x(self):
            print(self._x)
            
        def show_name(self):
            print('A')
            
            
    class B(object):
        def __init__(self, y=0):
            self._y = y
        
        def show_y(self):
            print(self._y)
            
        def show_name(self):
            print('B')
            
            
    class C(object):
        def __init__(self, z=0):
            self._z = z
        
        def show_z(self):
            print(self._z)
            
        def show_name(self):
            print('C')
            
    # 注意下面两类D、E,都是继承A、B、C,且A类的优先级最高。但是三条__init__语句的顺序是相反的
    class D(A, B, C):
        def __init__(self, x=0, y=0, z=0):
            C.__init__(self, z) # init C
            B.__init__(self, y) # init B
            A.__init__(self, x) # init A (A最优先)
            
    class E(A, B, C):
        def __init__(self, x=0, y=0, z=0):
            super(E, self).__init__(x) # init A (A最优先)  # 此句可简写成:super().__init__(x)
            super(A, self).__init__(y) # init B
            super(B, self).__init__(z) # init C
            
            
            
    # 测试
    if __name__ == '__main__':
        d = D(1,2,3)
        d.show_x()    # 1
        d.show_y()    # 2
        d.show_z()    # 3
        d.show_name() # A
        
        e = E(1,2,3)
        e.show_x()    # 1
        e.show_y()    # 2
        e.show_z()    # 3
        e.show_name() # A
    
  • 相关阅读:
    svn cleanup failed–previous operation has not finished 解决方法
    开源SNS社区系统推荐
    从网络获取图片本地保存
    MS SQL Server 数据库连接字符串
    KeepAlive
    Configure Git in debian
    sqlserver query time
    RPi Text to Speech (Speech Synthesis)
    SQL Joins with C# LINQ
    search or reseed identity columns in sqlserver 2008
  • 原文地址:https://www.cnblogs.com/hhh5460/p/7198551.html
Copyright © 2011-2022 走看看