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的更多相关文章

  1. Day 23 类的继承,派生,组合,菱形继承,多态与多态性

    类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...

  2. day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)

    1. 单继承 / 多继承 / 菱形继承 # ### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 """ 一个类可以继承另外一个类,那 ...

  3. C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式.

    C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式. 目录: 1.多重继承在内存中的表现形式 多重继承在汇编中的表现形式 2.菱形继承 普通的菱形继承 虚继承 汇编中的表现形 ...

  4. C++反汇编第四讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式.

    目录: 1.多重继承在内存中的表现形式 多重继承在汇编中的表现形式 2.菱形继承 普通的菱形继承 虚继承 汇编中的表现形式 一丶多重继承在内存中的表现形式 高级代码: class Father1 { ...

  5. c++之菱形继承问题

    昨天面试问了菱形继承的问题,回答的稀巴烂,回来赶快好好学习一波!!!!! 菱形继承如下图: 上一段代码: #include<bits/stdc++.h> using namespace s ...

  6. Python面向对象(组合、菱形继承、多态)

    今日内容: 1.组合 2.菱形继承 3.多态与多态性 昨天内容重点回顾: 1)调用也叫实例化:发生了2件事  1.创造空对象  2.触发对象下的__init__方法,然后将p连同参数一同传给init  ...

  7. C++中的类继承(4)继承种类之单继承&多继承&菱形继承

    单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承.这种关系比较简单是一对一的关系: 多继承是指 一个子类有两个或以上直接父类时称这个继承关系为多继承.这种继承方式使一个子类可 ...

  8. C++中的类继承之单继承&多继承&菱形继承

     C++中的类继承之单继承&多继承&菱形继承 单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承.这种关系比较简单是一对一的关系: 多继承是指 一个子类有两个或 ...

  9. c++继承汇总(单继承、多继承、虚继承、菱形继承)

    多重继承中,一个基类可以在派生层次中出现多次,如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多分同名成员.C++提供虚基类的方法使得在 ...

  10. day23:单继承&多继承&菱形继承&__init__魔术方法

    1.单继承 1.1 关于继承的一些基本概念 1.2 子类可以调用父类的公有成员 1.3 子类无法调用父类的私有成员 1.4 子类可以改写父类的方法 2.多继承 2.1 多继承的基本语法 2.2 sup ...

随机推荐

  1. [转帖]Kubernetes-17:Kubernets包管理工具—>Helm介绍与使用

    https://www.cnblogs.com/v-fan/p/13949025.html Kubernets包管理工具->Helm 什么是Helm? 我们都知道,Linux系统各发行版都有自己 ...

  2. kafka学习之五_多个磁盘的性能验证

    kafka学习之五_多个磁盘的性能验证 背景 周末在家学习kafka 上午验证了grafana+kafka_exporter的监控 下午想着验证一把性能相关. kafka学习之三里面,有成套的脚本. ...

  3. Mysql8.0.32 union all创建视图无法使用中文模糊查询的坑

    Mysql8.0.32 union all创建视图无法使用中文模糊查询的坑 摘要 本周研发同事反馈现场有一个问题. 客户使用mysql的数据库(Windows平台) 然后在多表union all 创建 ...

  4. Rsync的一个高级应用

    Rsync的一个高级应用 背景 2019年刚开始接触linux时. 有一个很恶心的场景. 很多人为了简单起见, 提交数据库的修改(数据结果和预制数据) 都不是增量处理, 都是全量提交过来. 所以会造成 ...

  5. CentOS8 的容器运行时解决中文乱码问题的一个思路

    首先说明一下 CentOS7和CentOS8关于locale语言文件的位置是不一样的. Docker pull centos 拉取下来的镜像 一般是不带中文语言包的. 简单方法是在 CentOS之后安 ...

  6. 【JS 逆向百例】X球投资者社区 cookie 参数 acw_sc__v2 加密分析

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...

  7. 从零开始配置 vim(16)——启动界面配置

    不知道各位小伙伴用过 spacevim 或者 LunarVim 又或者 doomvim 或者其他的什么 vim 配置框架,我们发现他们的启动界面都做的比较好看,而我们默认进入的启动界面则显得比较素了. ...

  8. 三线表制作(word)

    三线表制作 转载:https://blog.csdn.net/zaishuiyifangxym/article/details/81668886

  9. 深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)

    深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别.实体.关系.属性抽取实战项目合集(含智能标注) 1.命名实体识别介绍 命名实体识别(Named Entity R ...

  10. 火遍外网的Keychron测评,带你入坑;ps马上5.20了送一个给你的心爱的她/他。

    那些年用过的机械键盘 如果你经常上YouTube或Instagram,然后你又对键盘感兴趣,我相信你肯定看到过他--Keychron K2,他真的是一款曝光量很高的键盘. 1.键盘keychron k ...