day23:单继承&多继承&菱形继承&__init__魔术方法
单继承
关于继承的一些基本概念
1.什么是子类?什么是父类?如果一个类继承另外一个类,该类叫做子类(衍生类),被继承的类叫做父类(基类,超类)
2.继承的种类:1.单继承 2.多继承
3.object类:在python中,所有的类都默认继承父类object
定义一个Human类,并定义一些属性和方法:
class Human(object):
hair = "黑色"
sex = "男" def cry(self):
print("人类会哭")
def eat(self):
print("人类会吃东西")
def __makebaby(self):
print("人类会繁衍生息")
子父继承之后,子类可以调用父类的公有成员
# 1.子父继承之后,子类可以调用父类的公有成员
class Man(Human): # 定义Man类,继承Human类
pass obj = Man()
print(obj.hair) # 子类Man直接调用父类的hair属性
obj.cry() # 子类Man直接调用父类的cry方法
子父继承之后,子类不能调用父类的私有成员
# 2.子父继承之后,子类不能调用父类的私有成员
class Woman(Human):
def pub_func(self):
self.__makebaby() obj = Woman()
obj.__makebaby() # error 子类无法直接调用父类的私有成员
obj.pub_func() # error 即使在子类定义pub_func用来存放私有成员,那也是父类的私有成员,而非子类的
子父继承之后,子类可以改写父类中的方法
子父继承之后
1.如果子类里面有该成员属性或者方法,优先调用自己的
2.如果子类没有该成员,则调用父类中的成员
3.如果子类父类都没有该成员,则直接报错
class Children():
sex = "女"
def cry(self):
print("小孩会哇哇哇哭")
obj = Children()
obj.cry() # 子类有cry方法,优先使用子类的
多继承
多继承的基本语法
# 1.基本语法
class Father():
property = "爸爸英姿飒爽"
def f_hobby(self):
print("爸爸喜欢抽烟") class Mother():
property = "妈妈倾国倾城"
def m_hobby(self):
print("妈妈喜欢打麻将") class Daughter(Father,Mother): # Daughter类继承Father类和Mother类
pass # 实例化对象
obj = Daughter()
print(obj.property) # 优先会继承Father类的property
obj.m_hobby() # 妈妈喜欢打麻将
super用法
1.super本身是一个类,super()是一个对象,用来调用父类的绑定方法
2.super()只应用在绑定方法中,默认自动传递self对象(前提super所在作用域存在self)
3.super用途:解决复杂的多继承调用顺序
class Father():
property = "爸爸英姿飒爽"
def f_hobby(self):
print("爸爸喜欢抽烟") class Mother():
property = "妈妈倾国倾城"
def m_hobby(self):
print("妈妈喜欢打麻将") class Son(Father,Mother):
property = "儿子喜欢玩游戏" # 1.利用类来调用父类的成员
def skill1(self):
Father.f_hobby()
print(Mother.property)
# 2.利用对象调用父类的成员
def skill2(self):
self.m_hobby()
print(self.property)
# 3.利用super调用父类的属性和方法
"""
super()只调用父类的相关公有成员,不会调用自己的本类成员,父类没有直接报错
super()在调用父类方法时,只调用父类的绑定方法,默认传递参数是本类的对象self
"""
def skill3(self):
print(super().property)
super().m_hobby() obj = Son()
obj.skill1()
obj.skill2()
obj.skill3()
self和super的区别
self和super()的区别:
self在调用成员时,先看看自己的类对象是否存在该成员
1.如果有调用自己的.
2.如果子类自己没有,调用父类的
3.如果子类和父类都没有,则直接报错
super()在调用成员时,只调用父类的相关成员(属性,绑定方法)
永远不会调用自己的,如果父类没有,直接报错
菱形继承(钻石继承)
super:用来解决复杂的多继承调用顺序
class OldWoman():
pass class Human():
pty = 4
def feelT(self):
print("原始人类热了,吃冰块1")
print(self.pty)
print("原始人类冷了,生火取暖2") class Man(Human):
pty = 3
def feelT(self):
print("现代男人热了,光膀子3")
super().feelT()
print("现代男人冷了,穿大棉袄4") class Woman(Human):
pty = 2
def feelT(self):
print("现代女人热了,吹空调5")
super().feelT()
print("现代女人冷了,喝热水6") class Children(Man,Woman):
pty = 1
def feelT(self):
print("现代小孩热了,哇哇哭7")
super().feelT()
print("现代小孩冷了,也要哭8") obj = Children()
obj.feelT()
执行顺序是73512648,继承顺序Children->Father->Mother->Human
执行完毕之后还需要将每个类中的feelT方法中剩余的代码执行完
整个代码的执行顺序像递归中"一来一回"的过程
mro列表:返回调用顺序列表
mro列表:super用途的一个体现,解决复杂的多继承调用顺序关系
类.mro() 返回的是方法调用顺序列表,针对于多继承下的同名方法,按照顺序依次的进行调用
lst = Children.mro()
print(lst)
"""
[
<class '__main__.Children'>,
<class '__main__.Man'>,
<class '__main__.Woman'>,
<class '__main__.Human'>,
<class 'object'>
]
"""
issubclass 判断子父关系 (应用在类当中,判断子父关系)
# issubclass 判断子父关系 (应用在类当中,判断子父关系)
"""只要在一条继承链上即可(有血缘关系)"""
res = issubclass(Children,Man)
print(res)
res = issubclass(Children,Woman)
print(res)
res = issubclass(Children,Human)
print(res)
res = issubclass(Children,(Human,Woman,Man,OldWoman))
print(res)
res = issubclass(Children,OldWoman)
print(res)
isinstance (应用在对象和类之间,判断类型)
# isinstance(应用在对象和类之间,判断类型)
"""只要在一条继承链上即可(有血缘关系)"""
res = isinstance(obj,Children) # True
res = isinstance(obj,Human) # True
res = isinstance(obj,(Human,Children,Woman)) # True
res = isinstance(obj,OldWoman) # False
问题:打印的值是多少?
如图所示:

魔术方法之__init__方法
__init__方法简介
1.触发时机:实例化对象,初始化的时候触发
2.功能:为对象添加成员
3.参数:参数不固定,至少一个self参数
4.返回值:无
day23:单继承&多继承&菱形继承&__init__魔术方法的更多相关文章
- Learn day7 继承(单、多、菱形)\多态\魔术方法\装饰器\异常
1.继承 1.1 单继承# ### 继承 """ (1) 单继承 (2) 多继承 至少2个类,子类和父类 一个类继承另外一个类,当前类是子类 (衍生类) 被继承的这个类是 ...
- Day 23 类的继承,派生,组合,菱形继承,多态与多态性
类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...
- day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)
1. 单继承 / 多继承 / 菱形继承 # ### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 """ 一个类可以继承另外一个类,那 ...
- C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式.
C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式. 目录: 1.多重继承在内存中的表现形式 多重继承在汇编中的表现形式 2.菱形继承 普通的菱形继承 虚继承 汇编中的表现形 ...
- Python面向对象(组合、菱形继承、多态)
今日内容: 1.组合 2.菱形继承 3.多态与多态性 昨天内容重点回顾: 1)调用也叫实例化:发生了2件事 1.创造空对象 2.触发对象下的__init__方法,然后将p连同参数一同传给init ...
- C++反汇编第四讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式.
目录: 1.多重继承在内存中的表现形式 多重继承在汇编中的表现形式 2.菱形继承 普通的菱形继承 虚继承 汇编中的表现形式 一丶多重继承在内存中的表现形式 高级代码: class Father1 { ...
- c++之菱形继承问题
昨天面试问了菱形继承的问题,回答的稀巴烂,回来赶快好好学习一波!!!!! 菱形继承如下图: 上一段代码: #include<bits/stdc++.h> using namespace s ...
- C++中的类继承(4)继承种类之单继承&多继承&菱形继承
单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承.这种关系比较简单是一对一的关系: 多继承是指 一个子类有两个或以上直接父类时称这个继承关系为多继承.这种继承方式使一个子类可 ...
- C++中的类继承之单继承&多继承&菱形继承
C++中的类继承之单继承&多继承&菱形继承 单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承.这种关系比较简单是一对一的关系: 多继承是指 一个子类有两个或 ...
随机推荐
- day35 socket套接字介绍
目录 一.套接字发展史与分类 二.套接字工作流程 三.基于tcp的套接字 一.套接字发展史与分类 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD U ...
- Python3笔记027 - 6.2 参数传递
第6章 函数 6.2 参数传递 在理解形参和实参的基础上,理解位置参数.关键字参数.可变参数这三种情形,以及这三种的混合情形. 6.2.1 形式参数和实际参数 形式参数:在定义函数时,函数名后面括号中 ...
- web 部署专题(三):压力测试(一)工具 siege
1.介绍 Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访 ...
- JavaScript之setinterval的具体使用
关于setInterval在api文档中也有很详细的解释,比如下面那两个: setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停 ...
- POJ 1046 Color Me Less 最详细的解题报告
题目来源:POJ 1046 Color Me Less 题目大意:每一个颜色由R.G.B三部分组成,D=Math.sqrt(Math.pow((left.red - right.red), 2)+ M ...
- 计算机网络期末实验考题(Pacekt Tracer搭建网络拓扑实现通信)
期末考试的这一道实验题目具体要求如下: 搭建一个包含5个路由器.两个交换机和3个PC机的连通网络,网络拓扑结构自定,网络IP地址,子网掩码等信息自定, 最后实现3个PC机互通.要求:1)3个PC ...
- Lodash中数组常用方法
数组方法 1.数组对象去重 differenceBy(array, [values], [iteratee=_.identity]) let newArr =_.differenceBy( [{ na ...
- 洛谷P1063.能量项链
题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...
- css 过渡样式 transition
过渡顾名思义就是就是样式改变的一个过程变化 简介 transition: property duration timing-function delay; 值 描述 transition-proper ...
- 推荐IT经理/产品经理,常用工具和网站
一. 常用必备工具 1)文档工具 石墨文档,在线协作文档工具 https://shimo.im/ 2) 表格工具 麦客,在线问卷调查工具 http://www.mikecrm.com/ 3)脑图工具 ...