• 注册
当前位置:1313e > 默认分类 >正文

类与类的继承关系

1.单继承

1.从类名执行父类的属性
2.从对象执行父类的一切
注意: 子类以及子类对象只能调用父类的属性以及方法,不能操作(增删改)
# 既要执行父类方法又要执行子类方法,两种解决方式:
class Animal:live = '有生命的'def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexdef 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 = hobbydef 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:passclass D(O):passclass E(O):passclass F(O):passclass B(D,E):passclass C(E,F):passclass A(B,C):passa = 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())

转载于:https://www.cnblogs.com/wxl1025/p/11159234.html

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录
相关推荐