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…

 

posted @ 2018-02-05 19:10  消灭猕猴桃  阅读(192)  评论(0编辑  收藏  举报