Python面向对象编程三大特性之继承
继承
- 继承
- 继承的语法
- 重写
- 扩展
- 引用
- 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面向对象编程三大特性之继承相关推荐
- Python - 面向对象编程 - 三大特性之继承
继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的 class 类就叫子类(Subclass) 被继承的类一般称为父 ...
- Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态
Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...
- Python面向对象编程三大特性之多态
多态 code:_9polymorphism.py # ***************************************** """ 多态:对于同一个方法, ...
- Python面向对象编程三大特性之封装
封装 封装 封装的级别 获取对象的所有成员 code:_5packaging.py # ******************************************************** ...
- 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态
介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...
- 面向对象的三大特性之继承
# 面向对象的三大特性之继承# 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好 (如机器人) # 当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 (动物-- ...
- java面向对象特性_java面向对象编程三大特性
一说到java面向对象编程就想到面向对象的三大特性,封装,继承和多态,下面我们来具体分析以下这三大特性在编程中是如何具体体现的. 封装 将类的属性和具体实现细节隐藏,只提供相关的接口和方法来对隐藏信息 ...
- C++ 面向对象程序三大特性之 继承
目录 继承的概念 继承的定义及使用 继承方式和访问权限 基类和派生类对象的赋值转换 继承中的各成员的作用域 派生类的默认成员函数 构造函数 拷贝构造 赋值运算符重载函数 析构函数 继承与友元 继承与静 ...
- Python面向对象的三大特性
三大特性 特性 内容 封装 确保对象中数据的安全 继承 保证了对象的可扩展性 多态 增加了对象的灵活性 1.封装 隐藏对象中不希望被外部访问到的属性.方法. 封装虽然增加了类定义的复杂度,但确保了类的 ...
最新文章
- 2022-2028年中国超声波探伤仪行业市场现状调研及发展前景分析报告
- Centos下安装mysql 总结
- 内网***测试定位技术总结
- Patrol 7 架构下?的处理方法
- Android属性动画 PropertyValuesHolder
- Windows Azure 社区新闻综述(#70 版)
- java exec mvn_maven---常用插件之EXEC
- C#8.0可空引用类型的使用注意要点 1
- 200t不稳定_技术革新!将不可能变为可能 这家企业是怎么做到的?
- Ios开发之定位CLLocationManager
- Sublime Text 4设置光标闪烁
- ~~Kruskal算法
- 【Linux】【Shell】【Basic】字符串操作
- STM32F205VCT6主控PLC控制器板,已批量生产
- sonic云真机入门教程
- 利用fiddler和mock调试本地微信网页
- 嵌入式AI开发:Maixduino目标识别分类
- 属性动画Android动画,Android动画(三)属性动画Animator与Interpolator
- 【STC12C5A60S2】TOF250(TTL)基于51系列开发板的运用
- 【ML】主成分分析 PCA(Principal Component Analysis)原理 + 实践 (基于sklearn)
热门文章
- 基于vue2.0打造移动商城页面实践 vue实现商城购物车功能 基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果...
- 练习:写一个脚本,完成以下任务
- 阿里云负载不支持 WebSocket 协议与 WSS 和 Nginx 配置问题
- equals和== 的用法
- 并查集——营救(洛谷 P1396)
- 基本BASH SHELL脚本命令——切换目录以及处理文件和目录的基本知识
- oracle存储过程实验报告总结,Oracle存储过程总结(一、基本应用)
- python 把多个list合并为一个并去重内容_110道Python面试题(上)
- 2021年数据科学家面试:4个基本SQL窗口函数介绍以及示例
- Oracle 20c 新特性:XGBoost 机器学习算法和 AutoML 的支持