【Python】继承

一、继承的定义 

  • 定义
#父类A
class A():
    def str_info(self):
        print("这是一个父类")
#子类B
class B(A):
    pass
#创建对象
result = B()
result.str_info()
#这是一个父类

二、多继承

  • 定义
#父类A
class A():
    def str_info(self):
        print("这是一个父类A")
#父类B
class B():
    def str_info1(self):
        print("这是一个父类B")
#子类C
class C(A, B):
    pass
#创建对象
result = C()
result.str_info()#这是一个父类A
result.str_info1()#这是一个父类B

注意:子类会优先继承A。

二、子类重写父类同名方法和属性

#父类A
class A():
    def str_info(self):
        print("这是一个父类")
#子类B
class B(A):
    #重写父类方法
    def str_info(self):
        print("子类重写父类方法")
#创建对象
result = B()
result.str_info()
#子类重写父类方法

三、mor顺序

  • __mor__:看查看该类继承了哪些父类。
#父类A
class A():
    def str_info(self):
        print("这是一个父类")
#子类B
class B(A):
    pass
result = B()
#查看
print(B.__mro__)

输出结果:


四、子类调用父类的同名方法和属性

#父类A
class A():
    def __init__(self):
        self.num=1
    def str_info(self):
        print(f"这是一个父类{self.num}")
#父类C
class C():
    def __init__(self):
        self.num=2
    def str_info(self):
        print(f'这是一个父类{self.num}')
#子类B
class B(A, C):
    def __init__(self):
        self.num = 3
    #调用父类方法,但是为保证调用到的也是父类的属性,必须在调用方法前调用父亲的初始化
    def getA(self):
        A.__init__(self)
        A.str_info(self)
    def getC(self):
        C.__init__(self)
        C.str_info(self)
result = B()
result.getA()#这是一个父类1
result.getC()#这是一个父类2

五、多层继承

#父类A
class A():
    def str_info(self):
        print("这是一个父类A")
#父类B
class B():
    def str_info1(self):
        print("这是一个父类B")
#子类C
class C(A, B):
    def str_info1(self):
        print("这是一个父类B")
#孙类D
class D(C):
    pass
#创建对象
result = D()
result.str_info()#这是一个父类A
result.str_info1()#这是一个父类B

六、super()调用父类方法

#父类A
class A():
    def str_info1(self):
        print("这是一个父类A")
#父类B
class B():
    def str_info1(self):
        print("这是一个父类B")
#子类C
class C(B, A):
    def str_info1(self):
        print("这是一个子类C")
    def father(self):
        super(C, self).str_info1()#写法一
        super().str_info1()#写法二
#创建对象
result = C()
result.father()

super()调用父类的优先级是子类括号里父类的排列顺序。


七、私有权限

对象不能访问私有属性和私有方法。

  • 定义
class A():
    #私有属性
    def __init__(self):
        self.__money = 200000
    #私有方法
    def __str_info1(self):
        print("这是一个父类A")
  • 获取和修改
class A():
    # 私有属性
    def __init__(self):
        self.__money = 200000
    # 定义获取私有属性值的函数
    def get_prv(self):
        return self.__money
    #定义修改私有属性值的函数
    def set_prv(self, money):
        self.__money = money
s1 = A()
s1.set_prv(5000)
print(s1.get_prv())
        

Guess you like

Origin blog.csdn.net/qq_26082507/article/details/121011936