zoukankan      html  css  js  c++  java
  • Python3 类和对象:继承

    1、继承

    class DerivedClassName(BaseclassName):

       子类                             父类

    如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性,父类中的方法不受影响

    2、继承父类属性并添加子类自己属性的方法

    1、调用未绑定的父类方法

    class A():
        def __init__(self):
            print("进入A…")
            print("离开A…")
    
    class B(A):
        def __init__(self):
            print("进入B…")
            A.__init__(self)
            print("离开B…")
            

    2、使用super函数

    class A():
        def __init__(self):
            print("进入A…")
            print("离开A…")
    
    class B(A):
        def __init__(self):
            print("进入B…")
            super.__init__(self)
            print("离开B…")
            

    super函数可以在你没有给定任何基类的名字时,它会自动帮你找出所有基类以及对应的方法

    3、多重继承(可能导致钻石继承,即重复调用)

    class DerivedClassName(Base1,Base2,Base3):

    class A():
        def __init__(self):
            print("进入A…")
            print("离开A…")
    
    class B(A):
        def __init__(self):
            print("进入B…")
            A.__init__(self)
            print("离开B…")
            
    class C(A):
        def __init__(self):
            print("进入C…")
            A.__init__(self)
            print("离开C…")
    
    class D(B, C):
        def __init__(self):
            print("进入D…")
            B.__init__(self)
            C.__init__(self)
            print("离开D…")
    >>> d = D()
    进入D…
    进入B…
    进入A…
    离开A…
    离开B…
    进入C…
    进入A…
    离开A…
    离开C…
    离开D…
    #A被调用了两次

    解决方法:使用super函数

    class A():
        def __init__(self):
            print("进入A…")
            print("离开A…")
    
    class B(A):
        def __init__(self):
            print("进入B…")
            super().__init__()
            print("离开B…")
            
    class C(A):
        def __init__(self):
            print("进入C…")
            super().__init__()
            print("离开C…")
    
    class D(B, C):
        def __init__(self):
            print("进入D…")
            super().__init__()
            print("离开D…")
    
    >>> d = D()
    进入D…
    进入B…
    进入C…
    进入A…
    离开A…
    离开C…
    离开B…
    离开D…
  • 相关阅读:
    iOS 友盟统计
    iOS 高德地图 根据经纬度解析成位置
    十六、Swift 可选值链条 Optional Chaining
    十五、自动引用计数 Automatic Reference Counting
    十四、析构器 Deinitialization
    BCB应对WIN7的放大屏幕文本技术
    十三、初始化 Initialization
    十二、继承 Inheritance
    十一、下标 Subscripts
    十、方法 Methods
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/8419029.html
Copyright © 2011-2022 走看看