码迷,mamicode.com
首页 > 其他好文 > 详细

类与类的继承关系

时间:2019-07-09 19:10:43      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:def   方法   问题   元素   多继承   父类   算法   难点   优先   

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())

类与类的继承关系

标签:def   方法   问题   元素   多继承   父类   算法   难点   优先   

原文地址:https://www.cnblogs.com/wxl1025/p/11159234.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!