继承

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__)

 

在多继承背景下的属性查找优先级:

 

posted on 2020-07-27 00:54  jueyuanfengsheng  阅读(103)  评论(0编辑  收藏  举报