day11,12 — 继承和派生
面向对象的三大特性:封装,继承和多态
一,继承
什么是继承?
# 什么是什么的关系 一个类是另一个类的子类
#继承是一种创新类的方式,新建的类可以继承一个或多个父类。父类有称为基类或超类,新建的类有成为派生类或子类
继承一个父类叫做单继承,继承多个父类叫做多继承
# 继承的好处 : 减少代码的冗余,增强代码的重用信
二,继承的用法
super : 调用父类的功能和方法
格式一 : 在子类的内部调用父类的属性和方法
class 父类名:
def 属性(self):
功能
class 子类名(父类名):
def 属性(self) :
super().属性名
1 class A: 2 def aa(self): 3 print(11) 4 class B(A): 5 def aa(self): 6 super().aa() 7 b=B() 8 b.aa()
在子类外部调用父类的属性和方法是,必须要给super传入两个参数,一个是子类名,一个是对象名:super(子类名,对象).属性()
在多继承的时候,super继承的是第一个父类
super :新式类调用父类的方法。 super找到有该方法或属性的第一个父类
1 # class People: 2 # def __init__(self,name,age,sex): 3 # self.name=name 4 # self.age=age 5 # self.sex=sex 6 # class Nan: 7 # pass 8 # class Student(Nan,People): 9 # def __init__(self,name,age,sex): 10 # super().__init__(name,age,sex) 11 # fang=Student('fang','男',18) 12 # print(fang.name)
父类名.__init__(self): 经典类调用父类方法和属性的方式
# class People: # def __init__(self,name,age,sex): # self.name=name # self.age=age # self.sex=sex # class Nan: # pass # class Student(Nan,People): # def __init__(self,name,age,sex): # People.__init__(self,name,age,sex) # fang=Student('fang','男',18) # print(fang.name)
继承中子类可以继承父类的所有属性和方法
# class People: # def __init__(self,name,age,sex): # self.name=name # self.age=age # self.sex=sex # class Nan: # pass # class Student(Nan,People): # def __init__(self,name,age,sex): # People.__init__(self,name,age,sex) # fang=Student('fang','男',18) # print(fang.name)
当子类和父类中有同名的方法和属性时,一定时调用自己的
如果想调用父类的方法和属性时,需要借用super来调用
对象剋有调用自己和父类的所有方法和属性,首先时调用自己的,自己没有再去调用父类的
谁(对象)调用方法,self就会指向谁
自己私有的方法叫做派生方法,自己私有的属性叫做派生属性
从下到上叫做抽象,从上到下叫做继承