当前位置 : 主页 > 手机开发 > 其它 >

面向对象-继承与派生

来源:互联网 收集:自由互联 发布时间:2021-06-19
1.继承 1.1继承概念 继承指的是类与类之间的关系,是一种什么“是”什么的关系,继承的功能之一就是用来解决代码重用问题。 继承是一种创建新类的方式,在Python中,新建的类可以
1.继承

1.1继承概念

继承指的是类与类之间的关系,是一种什么“是”什么的关系,继承的功能之一就是用来解决代码重用问题。
继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类可以成为基类或超类,新建的类成为派生类或子类

1.2python中类的继承分类:单继承和多继承

class ParentClass1: #定义父类
    pass

class ParentClass2: #定义父类
    pass

class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
    pass

class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
    pass

1.3查看继承

"__base__只查看从左到右继承的第一个父类
__bases__查看所有继承的父类"
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita
class ParentClass1: #定义父类
    pass

class ParentClass2: #定义父类
    pass

class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
    pass

class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
    pass
print(SubClass1.__base__)
print(SubClass2.__base__)
print(SubClass1.__bases__)
print(SubClass2.__bases__)

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
<class ‘__main__.ParentClass1‘>
<class ‘__main__.ParentClass1‘>
(<class ‘__main__.ParentClass1‘>,)
(<class ‘__main__.ParentClass1‘>, <class ‘__main__.ParentClass2‘>)

Process finished with exit code 0

1.4经典类与新式类

1.只有在Python2中才有新式类和经典类,Python3中全部都是新式类
2.在Python2中,如果没有显式的继承object类,那该类和其子类都是经典类
3.在Python2中,如果显式的继承object类,那该类和其子类都是新式类
4.在Python3中,无论是否继承object,都默认继承object,即Python3中所有类都是新式类
5.在Python3中,如果没有指定基类,会默认继承object类,object是所有Python类的基类
print(ParentClass1.__bases__)
print(ParentClass2.__bases__)
E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
(<class ‘object‘>,)
(<class ‘object‘>,)

Process finished with exit code 0

2.抽象与继承

抽象:抽取类似的部分,主要用于划分类别

继承:基于抽象的结果,通过编程语言去实现它,所以需要先对事物或逻辑进行抽象,之后通过继承的方式表达出抽象的结构

3.继承与重用

在开发中,如果类A与类B有很多相同的代码,就可以通过继承来实现,提高代码的重用性
可以让B继承A,B会‘遗传’A的所有属性(包含数据属性和函数属性)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita
class Hero:
    def __init__(self,nickname,aggressivity,life_value):
        self.nickname=nickname
        self.aggressivity=aggressivity
        self.life_value=life_value

    def attack(self,enemy):
        enemy.life_value-=self.aggressivity
class Garen(Hero):
    pass

class Riven(Hero):
    pass

g1=Garen(‘草丛伦‘,100,300)
r1=Riven(‘锐雯雯‘,57,200)

print(g1.life_value) #结果:300
r1.attack(g1)
print(g1.life_value) #结果:243

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
300
243

Process finished with exit code 0
"用已经有的类新建一个新的类,这样就可以重用已经有的软件中的部分代码,大大节省编程工作量,这就是软件重用,不仅可以重用自己的类,还可以继承别人写的类,也可继承标准库。"

4.属性查找与self深入理解

不管是类中的数据属性还是函数属性,都是先在自己的类中查找,没有,再到父类中查找

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita
class Foo:
    def f1(self):
        print(‘Foo.f1‘)

    def f2(self):
        print(‘Foo.f2‘)
        self.f1()

class Bar(Foo):
    def f1(self):
        print(‘Bar.f1‘)

b=Bar()
b.f2()

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
Foo.f2
Bar.f1

Process finished with exit code 0

网友评论