继承

  • 继承
  • 继承的语法
  • 重写
  • 扩展
  • 引用
  • super().父类方法名
  • 参数传递

code:_6Inheritance.py

# *****************************************************
"""
object类:在不指定继承的父类时,所有类都继承自object类(系统提供)
继承:当一个类去继承父类,那么这个类就拥有并可使用了父类中的所有成员包括魔术方法(除了私有成员)父类:被其他类继承的类,也叫做基类 或者超类;一个父类可以被多个子类继承子类:继承其他的类,也叫派生类继承的意义:提高代码的重用性,建立新的类与类的关系,方便其他逻辑的操作
继承的语法:class 父类():passclass 子类(父类):pass
重写:子类继承父类后,重新定义了父类中的方法,这样子类对象调用该方法时使用的是子类自定义的方法
扩展:子类继承父类后,可以定义自己的成员属性和成员方法
引用:子类继承父类后,并不会把父类的成员复制给子类,而是引用
super().父类方法名:在子类中可以去直接调用父类定义的方法 super().父类方法名
参数传递:子类调用父类方法时,父类需要的参数要求传递。
"""class Person:name = Nonesex = Nonedef __init__(self,n,s):self.name = nself.sex = sdef talk(self):print(f"{self.name}会说话***************")class Singer(Person):level = Nonedef __init__(self, n, s,l):super().__init__(n, s)  # 调用父类的初始化函数self.name = nself.sex = sself.level = ldef talk(self):print(f"{self.name}说话很好听***************")super().talk()def sing(self):print(f"{super().name}会唱歌*************")Jasmine = Singer("Jasmine",23,9)
Jasmine.talk()
Jasmine.sing()

运行结果:

E:\Programs_Way\Python\python.exe D:/Prj/_PythonSelf/Object_oriented_programming/_6Inheritance.py
Jasmine说话很好听***************
Jasmine会说话***************
None会唱歌*************Process finished with exit code 0

多继承

code:_7Multipy_Inheritance

# *****************************************************************
"""
单继承:一个类继承一个父类
多继承:一个类继承多个父类
链式继承:A类继承B类,B类继承C类,C类继承D类
单继承语法格式:见_6Inheritance
多继承语法格式:class 父类1():passclass 父类2():pass...class 子类(父类1,父类2,...):pass
注意:如果两个父类都有同名称的成员函数,使用super.成员函数调用成员函数时会执行继承的第一个父类的相关成员函数
"""class father:def eat(self):print("大口吃饭~")class mother:def eat(self):print("小口吃饭~")class child(father,mother):def eat(self):super().eat()  # 这里会调用第一个父类的方法print("又哭又闹吃饭饭~")Boly = child()
Boly.eat()

运行结果:

E:\Programs_Way\Python\python.exe D:/Prj/_PythonSelf/Object_oriented_programming/_7Multipy_Inheritance.py
大口吃饭~
又哭又闹吃饭饭~Process finished with exit code 0

菱形继承

code:_8diamond_inheritance.py

# **********************************************************
"""
菱形继承:类.mro()---获取类的继承关系列表super()---使用super()去访问父级的方法或属性时,实际上实在用super()调用MRO(Mothod Relation Order方法关系列表)列表中的上一级中的方法。使用super()方法时,传递的self对象,一直是最开始调用它的对象。MRO规则:child.mro() = [<class '__main__.child'>, <class '__main__.father'>, <class '__main__.mother'>, <class '__main__.human'>, <class 'object'>]1.子类永远在父类前面2.同一等级的类,按照子类中的继承顺序摆放3.先子类,后父类的顺序原则,最终的类是系统提供的object类检测是否是子类:issubclass(class1,class2)---检测class1是否为class2的子类
"""class human:name = "human"def eat(self):print("乖乖吃饭~")class father(human):name = "father"def eat(self):print(f"self in father = {self}")super().eat()  # 这里会调用第一个父类的方法print(f"super().name = {super().name}")print("大口吃饭~")class mother(human):name = "mother"def eat(self):super().eat()  # 这里会调用第一个父类的方法print(f"super().name = {super().name}")print("小口吃饭~")class child(father,mother):name = "child"def eat(self):print(f"self in child = {self}")super().eat()  # 这里会调用第一个父类的方法print(f"super().name = { super().name}")print("又哭又闹吃饭饭~")Boly = child()
print(f"child.mro() = {child.mro()}")
Boly.eat()
res = issubclass(child,mother)  # 检测child是否为mother的子类
print(res)

运行结果:

E:\Programs_Way\Python\python.exe D:/Prj/_PythonSelf/Object_oriented_programming/_8diamond_inheritance.py
child.mro() = [<class '__main__.child'>, <class '__main__.father'>, <class '__main__.mother'>, <class '__main__.human'>, <class 'object'>]
self in child = <__main__.child object at 0x0000019347F3B940>
self in father = <__main__.child object at 0x0000019347F3B940>
乖乖吃饭~
super().name = human
小口吃饭~
super().name = mother
大口吃饭~
super().name = father
又哭又闹吃饭饭~
TrueProcess finished with exit code 0E:\Programs_Way\Python\python.exe D:/Prj/_PythonSelf/Object_oriented_programming/_8diamond_inheritance.py
child.mro() = [<class '__main__.child'>, <class '__main__.father'>, <class '__main__.mother'>, <class '__main__.human'>, <class 'object'>]
self in child = <__main__.child object at 0x0000019347F3B940>
self in father = <__main__.child object at 0x0000019347F3B940>
乖乖吃饭~
super().name = human
小口吃饭~
super().name = mother
大口吃饭~
super().name = father
又哭又闹吃饭饭~
TrueProcess finished with exit code 0

Python面向对象编程三大特性之继承相关推荐

  1. Python - 面向对象编程 - 三大特性之继承

    继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的 class 类就叫子类(Subclass) 被继承的类一般称为父 ...

  2. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  3. Python面向对象编程三大特性之多态

    多态 code:_9polymorphism.py # ***************************************** """ 多态:对于同一个方法, ...

  4. Python面向对象编程三大特性之封装

    封装 封装 封装的级别 获取对象的所有成员 code:_5packaging.py # ******************************************************** ...

  5. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

  6. 面向对象的三大特性之继承

    # 面向对象的三大特性之继承# 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好 (如机器人) # 当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 (动物-- ...

  7. java面向对象特性_java面向对象编程三大特性

    一说到java面向对象编程就想到面向对象的三大特性,封装,继承和多态,下面我们来具体分析以下这三大特性在编程中是如何具体体现的. 封装 将类的属性和具体实现细节隐藏,只提供相关的接口和方法来对隐藏信息 ...

  8. C++ 面向对象程序三大特性之 继承

    目录 继承的概念 继承的定义及使用 继承方式和访问权限 基类和派生类对象的赋值转换 继承中的各成员的作用域 派生类的默认成员函数 构造函数 拷贝构造 赋值运算符重载函数 析构函数 继承与友元 继承与静 ...

  9. Python面向对象的三大特性

    三大特性 特性 内容 封装 确保对象中数据的安全 继承 保证了对象的可扩展性 多态 增加了对象的灵活性 1.封装 隐藏对象中不希望被外部访问到的属性.方法. 封装虽然增加了类定义的复杂度,但确保了类的 ...

最新文章

  1. 2022-2028年中国超声波探伤仪行业市场现状调研及发展前景分析报告
  2. Centos下安装mysql 总结
  3. 内网***测试定位技术总结
  4. Patrol 7 架构下?的处理方法
  5. Android属性动画 PropertyValuesHolder
  6. Windows Azure 社区新闻综述(#70 版)
  7. java exec mvn_maven---常用插件之EXEC
  8. C#8.0可空引用类型的使用注意要点 1
  9. 200t不稳定_技术革新!将不可能变为可能 这家企业是怎么做到的?
  10. Ios开发之定位CLLocationManager
  11. Sublime Text 4设置光标闪烁
  12. ~~Kruskal算法
  13. 【Linux】【Shell】【Basic】字符串操作
  14. STM32F205VCT6主控PLC控制器板,已批量生产
  15. sonic云真机入门教程
  16. 利用fiddler和mock调试本地微信网页
  17. 嵌入式AI开发:Maixduino目标识别分类
  18. 属性动画Android动画,Android动画(三)属性动画Animator与Interpolator
  19. 【STC12C5A60S2】TOF250(TTL)基于51系列开发板的运用
  20. 【ML】主成分分析 PCA(Principal Component Analysis)原理 + 实践 (基于sklearn)

热门文章

  1. 基于vue2.0打造移动商城页面实践 vue实现商城购物车功能 基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果...
  2. 练习:写一个脚本,完成以下任务
  3. 阿里云负载不支持 WebSocket 协议与 WSS 和 Nginx 配置问题
  4. equals和== 的用法
  5. 并查集——营救(洛谷 P1396)
  6. 基本BASH SHELL脚本命令——切换目录以及处理文件和目录的基本知识
  7. oracle存储过程实验报告总结,Oracle存储过程总结(一、基本应用)
  8. python 把多个list合并为一个并去重内容_110道Python面试题(上)
  9. 2021年数据科学家面试:4个基本SQL窗口函数介绍以及示例
  10. Oracle 20c 新特性:XGBoost 机器学习算法和 AutoML 的支持