Python类的继承

通过一段代码来验证子类默认继承父类所有属性和方法

class A(object):
    def __init__(self):
        self.num = 1
    
    def info_print(self):
        print(self.num)

# 子类
class B(A):
    pass

result = B()
result.info_print()  #1

B这个类确实继承到了A这个类

 

多继承问题:

# 1.定义父类
class A(object):
    def __init__(self):
        self.num = 1
    def info_print(self):
        print(self.num)

class C(object):
    def __int__(self):
        self.num = 2
    def info_print(self):
        print(self.num)
# 2. 定义子类,继承父类

class B(A, C):
    pass

result = B()
result.info_print()

打印出的结果为1,这就证明,一个类继承多个父类时,默认使用第一个类的同名属性和方法

 

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

# 1.定义父类
class A(object):
    def __init__(self):
        self.num = 1
    def info_print(self):
        print(self.num)

class C(object):
    def __int__(self):
        self.num = 2
    def info_print(self):
        print(self.num)
# 2. 定义子类,继承父类

class B(A, C):
    def __init__(self):
        self.num = 3

    def info_print(self):
        print(self.num)

result = B()
result.info_print()

子类与父类具有同名属性和方法,默认使用子类的同名属性和方法

 

查看类的继承层级顺序

以上面代码为例,B继承了A类和C类

print(B.__mro__)

打印的结果为:(<class '__main__.B'>, <class '__main__.A'>, <class '__main__.C'>, <class 'object'>)

 

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

class B(A, C):
    def __init__(self):
        self.num = 3

    def info_print(self):
        self.__init__()
        print(self.num)

    def print_A(self):
        A.__init__(self)
        A.info_print(self)

    def print_C(self):
        C.__init__(self)
        C.info_print(self)

在子类中书写函数,注意调用父类A和B时,要记得调用响应的__init__方法,并且写上self来接收调用这个函数的对象。

 

多层继承

class B_junior(B):
    pass
result = B()
result.info_print()
result.print_A()
result.print_C()

r_junior = B_junior()
r_junior.info_print()
r_junior.print_A()
r_junior.print_C()

令定义一个类来继承B类,然后用继承后的对象调用B类所有方法,结果是一样的,r_junior得到的结果和result一样

posted @ 2020-06-11 17:12  鸡龟骨滚羹  阅读(170)  评论(0)    收藏  举报