Python基础面向对象之继承与派生详解

 更新时间:2022年11月04日 10:45:12   作者:Kkkkangsh  
这篇文章主要为大家介绍了Python基础面向对象之继承与派生详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、面向对象三大特征之继承

python三大特征:

封装、继承、多态

三者中继承最为核心,实际应用多,感受较为直观

封装和多态略微抽象

1、继承的概念

继承的含义:

在现实生活中,继承表示人与人之间资源的从属关系

例如:儿子继承父亲

在编程的世界中,继承表示类与类之间的资源从属关系

例如:类a继承类b

继承的目的:

在现实生活中,儿子继承了附件就拥有了父亲所有资源的支配权限

在编程世界中,类A继承了类B就拥有了类B中所有的数据和方法使用权限

2、继承的本质

继承本质应该分为两部分:

当多个类中含有相同部分时,我们就把相同的部分抽离出去,将相同的部分新成一个新的类,在用刚才被抽离出去相同部分的类,去继承新的那部分,这样的好处就是,当多个类需要一个相同用的功能时,可以节省代码,不用反复编写

抽象:将多个类相同的东西抽出去,形成一个新的类

继承:将多个类继承刚刚抽取出来的新的类

对象>>>:数据与功能的结合体

类(子类)>>>:多个对象相同功能和数据的结合体

父类>>>:多个子类相同功能和数据的结合体

本质:类、父类的本质都是为了节省代码,减少重复编写相同代码的时间,使用时更为方便

3、继承的实操

在定义类的时候,类名后方可加括号,早括号内填入其他它类的名字,就意味着继承了其它类

python支持多类继承,括号内可填写多个类名,只需用逗号隔开即可

# 1、定义两个类,其中一个假设为父类,另一个假设为子类
class Father: 
    money = 99999999
    house = '老北京四合院'  # 父类中数据强大
class Son:
    pass  # 子类中空空如也
# 2、父类中的数据,子类无权直接使用,当我们在子类中继承父类后,子类和子类产生的对象都可以通过'点'的方式使用父类中的数据
class Father:
    money = 99999999
    house = '老北京四合院'
class Son(Father):
    pass
# 子类直接使用父类中的数据
print(Son.money)
# 子类产生的对象使用父类中的数据
obj1 = Son()
print(obj1.money)
------------------------------------------------------------------------------------
99999999
99999999

4、继承后名字查找的顺序

未继承:

对象(object)自身名称空间>>>类的名称空间

单线继承:

对象(object)自身名称空间>>>子类的名称空间>>>父类的名称空间

多线继承:

1、菱形继承: (广度优先,最后才会找闭环的定点)

对象自身名称空间>>>子类名称空间>>>父类名称空间(形参内由左至右)>>>闭环

2、非菱形继承: (深度优先)

对象自身名称空间>>>子类名称空间>>>父类名称空间(形参内由左至右)

在一个子类绑定多个父类时,名字的查找顺序可能比较难理解,针对这个问题,可以使用python中内置方法:mor()   

通过对象名点mor() 的方式,可以帮助我们查看名字的查找顺序

5、经典类与新式类

经典类:

不继承object的类或者其子类的类

新式类:

继承object或者其之类的类

在python3中,只有新式类,所有类都默认继承object

在python2中,区分经典类和新式类

在以后我们定义类的时候,如果没有明确的父类,可以在类的括号内填入object,这样话能够提高我们代码的兼容性

二、派生

1、派生的概念

派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法

2、派生的方法

1.直接引用父类的__ init __为其传参,并添加子类属性

缺点:代码重复率太高,浪费资源,时间

class People:
    school = '清华大学'
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age
class Teacher(People):
    def __init__(self, name, sex, age, title): #派生
        self.name = name
        self.sex = sex
        self.age = age
        self.title = title
    def teach(self):
        print(f'{self.name}是老师')
obj = Teacher('lili','female', 28, '高级教师') 
#只会找自己类中的__init__
print(obj.name, obj.sex, obj.age, obj.title)  
#lili female 28 高级教师

2.通过super()来只想父类的属性

super()是一个特殊的类,在子类__ init __内调用super得到一个对象,该对象指向父类的名称空间

class Teacher(People):
    def __init__(self, name, sex, age, title):
        super().__init__(name, age, sex)
        #调用的是绑定方法,自动传入self
        self.title = title
	 def teach(self):
         print(f'{self.name}是老师')
obj = Teacher('lili','female', 28, '高级教师') 

注意:在python2中super 的使用需要完整地写成super(自己的类名,self),而在python3中可以简写为super()。

以上就是Python基础面向对象之继承与派生详解的详细内容,更多关于Python面向对象继承派生的资料请关注脚本之家其它相关文章!

相关文章

  • 可能是史上最细的python中import详解

    可能是史上最细的python中import详解

    import在python中的意思是用来调用模块的,下面这篇文章主要给大家介绍了关于python中import详解的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • numpy中几种随机数生成函数的用法

    numpy中几种随机数生成函数的用法

    numpy是Python中常用的科学计算库,其中也包含了一些随机数生成函数,本文主要介绍了numpy中几种随机数生成函数的用法,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • pytorch 实现在一个优化器中设置多个网络参数的例子

    pytorch 实现在一个优化器中设置多个网络参数的例子

    今天小编就为大家分享一篇pytorch 实现在一个优化器中设置多个网络参数的例子,具有很好参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • django中path和url函数的具体使用

    django中path和url函数的具体使用

    本文主要介绍了django中path和url函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python任务调度利器之APScheduler详解

    Python任务调度利器之APScheduler详解

    所谓的任务调度是指安排任务的执行计划,即何时执行,怎么执行等。这篇文章主要介绍了Python任务调度利器之APScheduler详解,需要的朋友可以参考下
    2020-04-04
  • python处理二进制数据的方法

    python处理二进制数据的方法

    这篇文章主要介绍了python处理二进制数据的方法,涉及Python针对二进制数据的相关操作技巧,需要的朋友可以参考下
    2015-06-06
  • pytorch保存和加载模型的方法及如何load部分参数

    pytorch保存和加载模型的方法及如何load部分参数

    本文总结了pytorch中保存和加载模型的方法,以及在保存的模型文件与新定义的模型的参数不一一对应时,我们该如何加载模型参数,对pytorch保存和加载模型相关知识感兴趣的朋友一起看看吧
    2024-03-03
  • 利用python判断字母大小写的几种方法小结

    利用python判断字母大小写的几种方法小结

    在开发过程中有时候我们需要判断一个字符串是否是小写形式,下面这篇文章主要给大家介绍了关于利用python判断字母大小写的几种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Python Flask请求扩展与中间件相关知识总结

    Python Flask请求扩展与中间件相关知识总结

    今天带大家学习的是关于Python Flask的相关知识,文章围绕着Flask请求扩展与中间件的知识展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • 解析Python扩展模块的加速方案

    解析Python扩展模块的加速方案

    这章我们来介绍Python的扩展名之ctypes,教大家认识ctypes,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家多多进步,早日升职加薪
    2021-09-09

最新评论