类与类的继承关系

Posted wxl1025

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类与类的继承关系相关的知识,希望对你有一定的参考价值。

1.单继承

1.从类名执行父类的属性
2.从对象执行父类的一切
注意: 子类以及子类对象只能调用父类的属性以及方法,不能操作(增删改)
# 既要执行父类方法又要执行子类方法,两种解决方式:
class Animal:
    live = '有生命的'
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    def eat(self):
        print('动物都需要进食')
class Person(Animal):
    def __init__(self,name, age, sex, hobby):
        # 方法一:
        Animal.__init__(self, name, age, sex)
        # 方法二:
        # super(Person, self).__init__(name, age, sex)
        super().__init__(name, age, sex)
        self.hobby = hobby
    def eat(self):
        print('人类需要进食')
        super().eat()

p1 = Person('蔡徐坤', 21, '男','唱跳rap')
print(p1.__dict__)
p1.eat()

2.多继承

#多继承的难点就是继承顺序的问题
python2.2之前:都是经典类
python2.2直至python2.7之间存在两种类型: 经典类,新式类
python3x 只有新式类
经典类: 基类不继承object  查询规则依靠:深度优先的原则
新式类: 基类必须继承object  查询规则: mro算法
mro算法  面试中有可能会遇到
mro(Child(Base1,Base2)) = [ Child ] + merge( mro(Base1), mro(Base2), [ Base1, Base2] )
表头:列表的第一个元素
表尾:列表中表头以外的元素集合(可以为空)
class O:
    pass

class D(O):
    pass

class E(O):
    pass

class F(O):
    pass

class B(D,E):
    pass

class C(E,F):
    pass

class A(B,C):
    pass

a = A()
a.func()

mro(A) = mro(A(B,C))
       = [A] + merge(mro(B), mro(C), [B,C])

mro(B) = mro(B(D,E))
       = [B] + merge(mro(D), mro(E), [D,E])
       = [B] + merge([D,O], [E,O], [D,E])
       = [B,D] + merge([O], [E,O], [E])
       = [B,D,E,O]
       
mro(C) = mro(C(E,F))
       = [C] + merge(mro(E), mro(F),[E,F])
       = [C] + merge([E,O],[F,O],[E,F])
       = [C,E] + merge([O],[F,O],[F])
       = [C,E,F,O]

mro(A) = mro(A(B,C))
       = [A] + merge([B,D,E,O], [C,E,F,O], [B,C])
       = [A,B] + merge([D,E,O], [C,E,F,O], [C])
       = [A,B,D] + merge([E,O], [C,E,F,O], [C])
       = [A,B,D,C] + merge([E,O], [E,F,O])
       = [A,B,D,C,E] + merge([O], [F,O])
       = [A,B,D,C,E,F,O]
 
=>  print(A.mro())

以上是关于类与类的继承关系的主要内容,如果未能解决你的问题,请参考以下文章

类与类的关系——继承 包含 依赖的练习

Java 类与类的关联聚合继承实现关系

类与类,类与接口,接口与接口的关系 学习

类之间的关系

面向对象之类与类的关系

java--类与类之间的关系