python类的继承详解

描述

python类的继承

类的继承,跟人类繁衍的关系相似。

被继承的类称为基类(也叫做父类),继承而得的类叫派生类(也叫子类),这种关系就像人类的父子关系。

继承最大的好处是子类获得了父类的全部变量和方法的同时,又可以根据需要进行修改、拓展。

继承的语法结构是

class 子类(父类):

1. 单继承

举个例子:下面的代码中。先是定义了一个 People 类,里面有一个 speak 方法。然后再定义一个 Student 类,并继承自 People 类。

# 父类定义 class People: def __init__(self, name, age, weight): self.name = name self.age = age def speak(self): print(f"{self.name} 说: 我{self.age}岁。") # 单继承示例 class Student(People): def __init__(self, name, age, weight, grade): # 调用父类的实例化方法 People.__init__(self, name, age, weight) self.grade = grade

由于继承的机制,Student 实例会拥有 People 类所有属性和方法,比如下边我可以直接调用 People 类的 speak 方法。

>>> xm = Student(name="小明", age=10, weight=50, grade="三年级") >>> xm.speak() 小明 说: 我 10 岁。

你如果不想使用父类的方法,你可以重写它以覆盖父类的speak方法。

# 单继承示例 class Student(People): def __init__(self, name, age, weight, grade): # 调用父类的实例化方法 People.__init__(self, name, age, weight) self.grade = grade # 重写父类的speak方法 def speak(self): print(f"{self.name} 说: 我{self.age}岁了,我在读{self.grade}")

此时,再调用的话,就会调用自己的方法了

>>> xm = Student(name="小明", age=10, weight=50, grade="三年级") >>> xm.speak() 小明 说: 我10岁了,我在读三年级

2. 多继承

Python 还支持多继承,可以继承自多个类。

class 子类(父类1, 父类2, 父类3...):

多继承的话,情况会比单继承复杂得多。

假设多个父类都有一个 foo 方法,并且子类没有重写 foo 方法,那么 子类 的实例在调用 foo 方法时,应该使用哪个父类的 foo 方法呢?

关于这一点,只要简单的做个验证就行啦。

有如下代码,定义了 7 个类

class D:pass class C(D):pass class B(C): def show(self): print("i am B") class G:pass class F(G):pass class E(F): def show(self): print("i am E") class A(B, E):pass

运行后的结果如下

>>> a = A() >>> a.show() i am B

在类A中,没有show()这个方法,于是它只能去它的父类里查找,它首先在B类中找,结果找到了,于是直接执行B类的show()方法。可见,在A的定义中,继承参数的书写有先后顺序,写在前面的被优先继承。

3. 继承顺序

那如果B没有show方法,而是D有呢?

class D: def show(self): print("i am D") class C(D):pass class B(C):pass class G:pass class F(G):pass class E(F): def show(self): print("i am E") class A(B, E):pass

执行结果是

>>> a = A() >>> a.show() i am D

由此可见,多继承的顺序使用的是从左向右再深度优先的原则。

审核编辑:符乾江

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分