一.继承 inheritance和派生derived
1.定义
继承是从已有类中派生出新的类,新类具有原来的数据属性和行为,并扩展新的能力
派生是从一个已有的类中衍生出新类,在新的类上添加属性和行为
2.作用
(1)用继承派生机制,可以将一些共同功能加在基类中,实现代码的共享
(2)在不改变超类原来代码的基础上,改变原来由的功能
3.常用名词
上级:基类(base class)/ 超类(super class)/父类(father class)
下级:派生类(derived class)/子类(child class)
4.说明
任何类都间接的继承object类
object类是一切类的超类
类内的__base__属性:用来记录此类的基类
二.单继承
1.语法
class 类名(超类名):
语句块
示例:
class Human():
def say(self,text):
print("某人说",text)
class Student(Human):
def study(self,subject):
print("正在学",subject)
class Teacher(Student):
def teach(self,subject):
print("教的科目是",subject)
stu1=Student()
stu1.say("I need help")
t1=Teacher()
t1.say("I am a teacher")#一级一级向上找
三.覆盖:override
定义
覆盖是指在有继承派生关系的类中,子类实现了与基类同名的方法,在子类实例调用方法时,实际调用的是子类中的覆盖版本
四.相关函数
1.super函数
super(type,obj)#返回绑定超类的实例,要求obj必须为type的实例
super()#返回绑定超类的实例,等同于super(__class__,实例的第一个参数)且必须在方法内调用
作用:返回超类的实例,用超类实例来调用其自身的方法
示例:
class A():
def job(self):
print("A被调用")
class B(A):
def job(self):
print('B被调用')
def do_job(self):
super(B,self).job()#调用超类的方法
super().job()#调用超类的方法
#super(__class__,self).job()#调用超类的方法,但是不推荐使用
b=B()
b.job()#由上面的覆盖原理可知,打印出'B被调用'
super(B,b).job()#把子类对象当成父类来用,此时打印'A被调用'
五.父类子类的初始化方法
1.说明:当子类实现了__init__方法后,父类的__init__方法将被覆盖,即将不再主动调用父类的__init__方法,会引起父类的属性得不到初始化,此时需要显示调用父类的初始化方法
示例:
class Human():
def __init__(self,name,age):
self.name=name
self.age=age
def show_info(self):
print('姓名',self.name)
print('年龄',self.age)
class Student(Human):
def __init__(self,name,age,score):
super().__init__(name,age)#显式调用基类的初始化方法
self.score=score
def show_info(self):
super().show_info()#调用基类的方法
print('成绩为',self.score)
stu1=Student('小明',23,89)
stu1.show_info()#打印出结果为姓名 小明 \n 年龄 23 \n 成绩为 45