单继承,多继承,菱形继承---day21
1.单继承
# ### 继承:一个类除了自身所有用的属性方法之外,还获取了另外一个类的成员属性和方法
'''
一个类继承另外一个类,那么该类就是子类(衍生类),被继承的这个类就叫做父类(基类,超类)
继承:
(1)单继承 (2)多继承
python 所有的类都默认继承父类 object
''' # ### 单继承
class Human(object):
hair = '金色'
sex = '男' def eat(self):
print('人类天生就喜欢吃吃吃') def __makebaby(self):
print("人类天生就能够繁衍后代") #(1) 子父类继承之后,子类可以调用父类所有的公有成员
class Man(Human): #class Man(父类)
pass obj = Man() #Man(构造方法的参数)
print(obj.hair) #金色 #(2) 子父类继承之后,子类不可以调用父类的私有成员
class Woman(Human):
def pub_makebaby(self):
self.__makebaby obj = Woman()
obj.eat()
#obj.__makebaby() 不行
#obj.pub_makebaby() 不行 #(3) 子父继承之后,子类可以重写父类的同名方法
'''
子父继承之后
如果子类里面有该成员属性方法,优先调用自己的
如果没有该成员,name调用父类的公有成员
如果都没有,直接报错
'''
class Children(Human):
sex = '女性'
def eat(self):
print("小孩下生只能吃奶奶")
obj = Children()
print(obj.sex)
obj.eat()
2.多继承
# ### 多继承 #(1) 基本语法
class Father():
property = "玉树临风,风流倜傥,一枝梨花压海棠"
def f_hobby(self):
print("吃喝嫖赌抽,坑蒙拐骗偷,抽烟喝酒烫头") class Mother():
property = "沉鱼落雁,闭月羞花,一枝红杏出墙来"
def m_hobby(self):
print("打麻将,敷面膜,跳广场舞") class Daughter(Mother,Father):
pass #实例化对象
obj = Daughter()
print(obj.property)
obj.m_hobby() #(2) super用法
'''
(1)super本身就是一个类 super()是一个对象 用于调用父类的绑定方法
(2)super() 只应用在绑定方法中,默认自动传递self对象(前提super所在作用域存在self)
(3)super用途:解决复杂的多继承调用顺序
''' class Father():
property = "玉树临风,风流倜傥,一枝梨花压海棠"
def f_hobby():
print("吃喝嫖赌抽,坑蒙拐骗偷,抽烟喝酒烫头") class Mother():
property = "沉鱼落雁,闭月羞花,一枝红杏出墙来" #1.利用类来调用父类的成员
def skill1(self):
print(Mother.property)
Father.f_hobby() #2.利用对象调用父类的属性和方法
'''self在调用父类成员的时候,如果本类中里有,先调用自己的,没有,再调用父类的'''
def skill2(self):
self.m_hobby()
print(self.property) #3.利用super调用父类的属性和方法
'''
super() 只调用父类的相关公有成员,不会调用自己本类的成员,父类也没有的话,直接报错
super() 特指只调用父类,和self不同
'''
def skill3(self):
print(super())
print(super().property) #玉树临风,风流倜傥,一枝梨花压海棠
super().m_hobby() #super() 调用方法时,必须是绑定方法,默认传递该类的对象
#super().f_hobby() obj =Son()
obj.skill1()
obj.skill2 obj.skill3()
3.菱形继承
# ### 菱形继承
'''
Human
Man Woman
Children
''' class BigMan():
pass class Human():
pty = 4
def feelT(self):
#self 此刻接受的是Children的对象
print("原始人类天热了,让后裔把太阳射下来1")
print(self.pty) #obj.pty = 1
print("原始人类天冷了,让女娲补天,防止漏风2") class Man(Human):
pty = 3
def feelT(self):
#self 此刻接受的是Children的对象
print("现代男人天热了,吹吹空调3")
super().feelT()
print("现代男人天冷了,吹暖气4") class Woman(Human):
pty = 2
def feelT(self):
# self 此刻接受的是Children的对象
print("现代女人天热了,洗洗澡5")
super().feelT()
print("现代男人天冷了,吃雪糕6") class Children(Man,Woman):
pty = 1
def feelT(self):
print("现代小朋友天热了,洗海澡7")
#super() 调用方法时候,会携带当前类的对象进行传递
super().feelT()
print("现代小朋友天冷了,钻被窝8")
obj = Children()
obj.feelT() # mro 列表: super用途的体现 解决复杂的多继承调用顺序
'''
类.mro() 返回的是方法调用顺序的列表,针对于多继承下的同名方法,按照列表的顺序依次调用
'''
'''
[<class '__main__.Children'>, <class '__main__.Man'>, <class '__main__.Woman'>, <class '__main__.Human'>, <class 'object'>]
'''
lst = Children.mro()
print(lst) # issubclass 判断是否存在子父类系(语法使用跟isinstance的使用一模一样)
'''只要在一个继承链上即可(有血缘关系即可),应用范围在类的身上'''
res = issubclass(Children,Man)
res = issubclass(Children,Woman)
res = issubclass(Children,Human)
res = issubclass(Children,BigMan)
res = issubclass(Children , (Man,Woman,Human,BigMan))
print(res) #isinstance 判断类型
"""只要在一个继承链上即可(有血缘关系即可),是在判断对象和类之间的关系"""
res = isinstance(obj,Children)
res = isinstance(obj,Man)
res = isinstance(obj,Woman)
res = isinstance(obj,BigMan) # False
print(res) print(Children.__dict__) #in 判断在或者不在 在=> True 不在False
res = "feelT" in Children.__dict__
print(res) #True
总结:
继承 一个类除了自身所用的属性方法之外,还获取了另外一个类的成员属性和方法
继承又分为单继承 多继承 菱形继承
单继承
就是一个类继承另外一个类,那么该类就是子类,被继承的这个类就叫做父类
子类继承父类后,子类可以调用父类所有的公有成员,但是不可以调用父类的私有成员
如果子类的方法跟父类的方法同名,但是就想用自己的,那么就可以重写父类的同名方法
会优先调用自己类中的成员 多继承 就相当于子类继承多个父类
super超继承的用法 意思就是子类有的,父类也有,但是我又想用父类的,同时还要保留自己类的特性,
那么就可以用super超继承
super本身就是一个类,super()是一个对象,用于调用父类的绑定方法
只应用在绑定方法中,默认会自动传递self对象前提super所在的作用域存在self
只会调用父类的相关公有成员,不会调用自己本类的成员,要是父类也没有 就报错 菱形继承:
当一个子类继承多个父类时,多个父类最终继承了同一个类,称之为菱形继承
继承原理:
python到底是如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表,
这个MRO列表就是一个简单的所有基类的线性顺序列表,例如
__mro__查看继承查找
所有父类的MRO列表并遵循如下三条准则:
1.子类会先于父类被检查
2.多个父类会根据它们在列表中的顺序被检查
3.如果对下一个类存在两个合法的选择,选择第一个父类
单继承,多继承,菱形继承---day21的更多相关文章
- Day 23 类的继承,派生,组合,菱形继承,多态与多态性
类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...
- day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)
1. 单继承 / 多继承 / 菱形继承 # ### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 """ 一个类可以继承另外一个类,那 ...
- C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式.
C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式. 目录: 1.多重继承在内存中的表现形式 多重继承在汇编中的表现形式 2.菱形继承 普通的菱形继承 虚继承 汇编中的表现形 ...
- C++反汇编第四讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式.
目录: 1.多重继承在内存中的表现形式 多重继承在汇编中的表现形式 2.菱形继承 普通的菱形继承 虚继承 汇编中的表现形式 一丶多重继承在内存中的表现形式 高级代码: class Father1 { ...
- c++之菱形继承问题
昨天面试问了菱形继承的问题,回答的稀巴烂,回来赶快好好学习一波!!!!! 菱形继承如下图: 上一段代码: #include<bits/stdc++.h> using namespace s ...
- Python面向对象(组合、菱形继承、多态)
今日内容: 1.组合 2.菱形继承 3.多态与多态性 昨天内容重点回顾: 1)调用也叫实例化:发生了2件事 1.创造空对象 2.触发对象下的__init__方法,然后将p连同参数一同传给init ...
- C++中的类继承(4)继承种类之单继承&多继承&菱形继承
单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承.这种关系比较简单是一对一的关系: 多继承是指 一个子类有两个或以上直接父类时称这个继承关系为多继承.这种继承方式使一个子类可 ...
- C++中的类继承之单继承&多继承&菱形继承
C++中的类继承之单继承&多继承&菱形继承 单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承.这种关系比较简单是一对一的关系: 多继承是指 一个子类有两个或 ...
- c++继承汇总(单继承、多继承、虚继承、菱形继承)
多重继承中,一个基类可以在派生层次中出现多次,如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多分同名成员.C++提供虚基类的方法使得在 ...
- day23:单继承&多继承&菱形继承&__init__魔术方法
1.单继承 1.1 关于继承的一些基本概念 1.2 子类可以调用父类的公有成员 1.3 子类无法调用父类的私有成员 1.4 子类可以改写父类的方法 2.多继承 2.1 多继承的基本语法 2.2 sup ...
随机推荐
- [转帖]linux 部署jmeter&报错处理
一.linux 安装jdk Java Downloads | Oracle 二. linux上传jmeter 2.1 上传jmeter jmeter 下载地址: Apache JMeter - Dow ...
- ZCube:在我的优惠券中的落地实践 | 京东云技术团队
前言 我的优惠券作为营销玩法的一种运营工具,在营销活跃场中起到很至关重要的作用.如何更加高效的赋能业务,助理业务发展,灵活扩展业务,是我们一直追求和思考的方向 一.背景 1.1 现状 营销中台作为 ...
- ARC150D - Removing Gacha (树上期望)
Link 题意: 给一棵 \(n\) 个节点的树,称一个点是好的,当且仅当它到根的路径上都是黑色(包括自己).每次在不好的节点中随机选一个把它涂成黑色(不管原来它是否是白的),直到所有点都是好的为止. ...
- vue全局事件总线和消息订阅详细讲解
全局事件总线 在写组件的时候,我们都知道父传递子 也知道子传递给父 但是组件间嵌套复杂的时候我们应该怎么通信呢? 有的小伙伴会说适用vuex,的确是可以解决问题的 下面我们说一下全局事件总线 一种组件 ...
- 【k哥爬虫普法】简历大数据公司被查封,个人隐私是红线!
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...
- pymongo中针对指定集合更新validator规则
问题描述: 针对mongo中已创建的集合,更新validator验证器规则 解决方法 在确保pymongo中所使用的用户对目标数据库具有dbAdmin之类的管理权限的前提下(若无权限,可在mongo中 ...
- [置顶] k8s,docker,微服务,监控
综合 第一篇:k8s服务A内部调用服务B的方式 第二篇:go-zero grpc 第一篇:grpc,protobuf安装 第二篇:grpc签发证书 第三篇:golang-grpc 第四篇:python ...
- .net fromwork连接rabbitmq发布消息
1.创建连接工厂类 var factory = new RabbitMQ.Client.ConnectionFactory() { HostName = "120.237.72.46&quo ...
- ChatGenTitle:使用百万arXiv论文信息在LLaMA模型上进行微调的论文题目生成模型
ChatGenTitle:使用百万arXiv论文信息在LLaMA模型上进行微调的论文题目生成模型 相关信息 1.训练数据集在Cornell-University/arxiv,可以直接使用: 2.正式发 ...
- 【一】AI Studio 项目详解【(一)VisualDL工具、环境使用说明、脚本任务、图形化任务、在线部署及预测】PARL
相关文章 [一]-环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简介 [五]-Sarsa&Qlear ...