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. [转帖]如何升级vCenter(VCSA)补丁?

    https://www.dinghui.org/upgrade-vcsa-patch.html VCSA的升级分为repo源和iso镜像两种方式,由于使用repo源进行升级只支持HTTPS和FTPS协 ...

  2. [转帖]初识SkyWalking

    https://zhuanlan.zhihu.com/p/361579294 一.SkyWalking 是什么? 一个开源的可观测平台,用于从服务和云原生基础设施收集,分析, 聚合及可视化数据. Sk ...

  3. ChaosMesh 半离线安装过程

    说明 所谓半离线值得是公司拉不下镜像来 !-_-! 都是学习的官网资料https://chaos-mesh.org/docs 镜像获取 其实镜像获取很容易. 找一个能上外网的VPC就可以了. mkdi ...

  4. Whisper对于中文语音识别与转写中文文本优化的实践(Python3.10)

    阿里的FunAsr对Whisper中文领域的转写能力造成了一定的挑战,但实际上,Whisper的使用者完全可以针对中文的语音做一些优化的措施,换句话说,Whisper的"默认"形态 ...

  5. vue动画 <transition-group> 使用半场动画

    <style> /* 给动画添加一组过度效果 */ .v-enter, .v-leave-to { opacity: 0.8; /* 从右向左进入 */ transform: transl ...

  6. C语言输出狗头

    使用printf()函数输出样式 #include <stdio.h> int main() { printf(" * ii. ;9ABH,\n"); printf(& ...

  7. 从零开始配置 vim(13)——标签页插件

    原始的vim中标签页已经足够好用了.你完全可以使用原始 vim 提供的功能,但是使用插件可以让它更好看.这里我比较喜欢使用 bufferline 这个插件 安装 首先我们来安装它, 在使用 packe ...

  8. Python 封装zabbix-get接口

    Zabbix 是一款强大的开源网管监控工具,该工具的客户端与服务端是分开的,我们可以直接使用自带的zabbix_get命令来实现拉取客户端上的各种数据,在本地组装参数并使用Popen开子线程执行该命令 ...

  9. MakeFile文件的使用 [补档-2023-07-13]

    makefile-gdb文件 ​ 可以在文件中指定那些文件可以先进行编译,那些文件可以后进行编译,那些文件可以重新编译.他可以自动化编译程序.... 6-1 makefile基本规则 ​ 如下: ​ ...

  10. VB6的OfficeMenu控件 - 开源研究系列文章

    这次将原来VB6中喜欢和使用到的OfficeMenu的控件做一个使用介绍. 上次介绍了VB6中的控件引擎,但是那个只针对基本的控件,这个OfficeMenu控件在当时是收费的,笔者找度娘好不容易才下载 ...