#继承和派生
什么是继承派生呢?
继承:从已有类中派生出新的类,具有原类的属性和行为,并且可以添加新的行为
派生:从已有类中派生出新的类,在新类的基础上添加新的属性和行为
通俗的讲:
小明他⑧有一套房和一辆车,百年之后小明继承了他⑧的房和车,这就是继承,派生就是在继承的房和成进行一定的改装,或装修。
为什么使用继承或派生呢?
继承的目的就是延续旧的类的功能
派生的目的就是在旧类的基础上改变原有的功能
使用继承或派生可以节省我们大量的写重复代码的时间,比如自行车和电动车,肯定先有的自行车,后有的电动车,自行车有的功能电动车基本都有这就是继承,然后在此基础之上改装使用电,这就是派生了
名词解释:
基类/超类/父类是继承的原类(自行车)
派生类/子类是(电动车)
继承分为单继承个多继承
单继承:只继承一个基类
语法:
class 类名(基类名):
语句块
举个小栗子:
class Human:
def say(self, what): # 说话行为
print('说',what)
def walk(self, distance): # 走路行为
print('走了', distance, '公里')
class Student(Human): # 继承了Human类,有说话行为和走路行为
def study(self, subject): # 改装,添加学习的行为,Student类就可以说是由Human派生出来的类
print('正在学', subject)
class Teacher(Student): # 继承了Student类,有说话行为、走路行为、学习行为
def teach(self, subject): # 改装,再添加一个教书的行为
print('正在教', subject)
h1 = Human() # 创建一个Human实例对象
h1.say('今天天气真好')
h1.walk(5)
s1 = Student() # 调用一个Student实例对象
s1.walk(4)
print('走的有点了类,先休息一下')
s1.study('python')
t1 = Teacher() # 创建一个Teacher实例对象
t1.walk(4)
print('走的有点了类,先休息一下')
t1.teach('python')
注释写的很明白,就不做详细解释了
那么继承派生的作用是什么?
- 可以将一些共有的功能加在基类中,实现代码的共享
- 在不改变基类的基础上改变原有的功能
提出一个问题:Human继承谁呢?
在python3中任何类都直接或间接的继承object类
object是一切类的超类
Human继承的object,可以这么写
class Human(object):
pass
多继承:继承两个或两个以上基类
语法:
class 类名(基类1,基类2...):
pass
说明:
一个子类同时继承多个父类,父类的方法可以同时被继承下来,如果两个父类中有同名的方法,而在子类中又没有覆盖此方法时,调用先继承的类的方法。
举个栗子:
class A:
def m(self):
print('A.m被调用')
class B:
def m(self):
print('B.m被调用')
class AB(A, B): # 对于m方法来说,先继承A,后继承B
pass
ab = AB()
ab.m() # 调用先继承的里边的方法
运行结果就是:
A.m被调用
这也是多继承的一个缺陷,要谨慎使用多继承
如何查看类的基类?
__bases__ # 记录类的基类
语法:
print(类名.__bases__)
如上述例子我们分别查看一下Teacher、Student、Human的基类是谁!
print(Teacher.__bases__)
print(Student.__bases__)
print(Human.__bases__)
打印结果:
(<class '__main__.Student'>,)
(<class '__main__.Human'>,)
(<class 'object'>,)
####判断是否是谁的派生类,或是否是继承了 某类
语法格式:
issubclass(cls,class_or_tuple)
是则返回True,否则返回False
举个简单的栗子:
>>> class A:
pass
>>> class B(A):
pass
>>> class C(B):
pass
>>> issubclass(B,A)
True
>>> issubclass(C,A)
True
>>> issubclass(C,B)
True
>>> issubclass(C,(A,B))
True
本节完