1 什么是继承
继承一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类基类超类
python中继承的特点:
1.) 子类可以遗传/重用父类的属性2. )python中一个子类可以同时继承多个父类3.) 在继承背景下去说,python中的类分为两种:新式类,经典类
新式类: 但凡继承了object的类Foo,以及该类的子类...都是新式类
在python3中一个类即便是没有显式地继承任何基类,默认就会继承object类,即python3中所有的类都是新式类
经典类:没有继承object的类,以及该类的子类...都是经典类
python2中才区分新式类与经典类,在python2中一个类如果没有显式地继承任何类,也不会继承object
2.为何要用继承?
减少类与类之间代码冗余,增加代码的重用性。
继承的使用:
在Python3中的继承
Python2中的继承:
单继承情况下属性的访问顺序:对象》对象的类》类》父类......
ps1:
ps2:
查找顺序必须是对象》对象的类》父类,并不是就近访问。父类中的self.f1()=obj.f1() class Foo: def f1(self): print('Foo.f1') def f2(self): print('Foo.f2') self.f1() #obj.f1() class Bar(Foo): def f1(self): print('Bar.f1') obj=Bar() obj.f2() ''' 打印结果 Foo.f2 Bar.f1
在子类派生出新的方法中重用父类功能的方式一:
#指名道姓地引用某一个类中的函数 #虽然子类(JiMeiStudent和JiMeiTeacher)调用了父类中的属性,但与继承无关,因为在两个子类中不加父类的名字,仍然可以访问父类内部的属性。在这里只是利用父类调用其内部的函数,并没有自动传值的效果。 class JiMeiPeople: school='JiMei' def __init__(self,name,age,sex): #老师和学生的共有属性,重用时都可以过来调 self.name=name self.age=age self.sex=sex def choose_course(self): print('%s choosing course'%(self.name)) class JiMeiStudent(JiMeiPeople): def __init__(self,name,age,sex,score=0): # 类访问自己类中的函数,必须自己传值。 #类和对象访问属性或函数的方式为对象.属性/函数,类.属性/函数。 JiMeiPeople.__init__(self,name,age,sex) self.score = score class JiMeiTeacher(JiMeiPeople): def __init__(self,name,age,sex,level): JiMeiPeople.__init__(self,name,age,sex) self.level=level objc=JiMeiStudent('李浩',17,'男') print(objc.__dict__) objc1=JiMeiTeacher('周青',34,'male',10) print(objc1.__dict__)
在多继承背景下的属性查找优先级: