一.继承 -> 单继承

如果一个类继承另外一个类,
该类叫做子类(衍生类),被继承的类叫做父类(基类,超类)继承:(1)单继承 (2)多继承
python中,所有的类都默认继承object
class Human(object):hair = "黑色"sex = "男"def cry(self):print("人类在伤心的时候,会流下鳄鱼的眼泪")def eat(self):print("人类在远古时候,捉到猎物直接吃")def __makebaby(self):print("人类在发育到成熟的时候,会造人")

1.子父继承之后,子类可以调用父类的公有成员

class Man(Human):passobj =Man()
print(obj.hair)  # 黑色
obj.cry()  # 人类在伤心的时候,会流下鳄鱼的眼泪

2.子父继承之后,子类不能调用父类的私有成员

class Woman(Human):def pub_func(self):self.__makebaby()obj = Woman()
# obj.__makebaby()  error
# obj.pub_func()  error

3.子类继承之后,子类可以改写父类中的方法

子父继承之后
如果子类里面有该成员属性或者方法,优先调用自己的
如果没有该成员,调用父类中的成员
如果都没有,直接报错
class Children(Human):sex = "女性"def cry(self):print("小孩只会哇哇哇的哭")obj = Children()
obj.cry()  # 小孩只会哇哇哇的哭
print(obj.__dict__)  # {}
print(Children.__dict__)  # {'__module__': '__main__', 'sex': '女性', 'cry': <function Children.cry at 0x000002C694025D90>, '__doc__': None}

二.多继承

1.基本语法

class Father():property = "风流倜傥,一表人才,一枝梨花压海棠"def f_hobby(self):print("社会摇,蹦迪,吃喝嫖赌,大保健")class Mother():property = "闭月羞花,倾国倾城,一枝红杏出墙来"def m_hobby(self):print("打麻将,打牌,喝酒抽烟烫头,跳广场舞")class Daughter(Father, Mother):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 = "闭月羞花,倾国倾城,一枝红杏出墙来"def m_hobby(self):print("打麻将,打牌,喝酒抽烟烫头,跳广场舞")class Son(Father, Mother):property = "喜欢打游戏,wow,lol,dnf,泡泡堂,cf,dota,大话西游,跑跑卡丁车,吃鸡"# 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())print(super().property)super().m_hobby()# super().f_hobby()  errorobj = Son()
print("======")
obj.skill1()  # 社会摇,蹦迪,吃喝嫖赌,大保健   闭月羞花,倾国倾城,一枝红杏出墙来
print("======")
obj.skill2()  # 打麻将,打牌,喝酒抽烟烫头,跳广场舞    喜欢打游戏,wow,lol,dnf,泡泡堂,cf,dota,大话西游,跑跑卡丁车,吃鸡
print("======")
obj.skill3()  # 风流倜傥,一表人才,一枝梨花压海棠    打麻将,打牌,喝酒抽烟烫头,跳广场舞

self 和 super()的区别
self 在调用成员时,先看看自己的类对象中是否存在该成员,如果有调用自己的,如果没有,调用父类的,如果都没有报错
super() 在调用成员时,只调用父类的相关成员(属性,绑定方法),永远不会调用自己的,如果父类没有,直接报错

三.菱形继承(钻石继承)

"""Human
Man         WomanChildren
"""
class OldWoman():passclass Human():pty = 4def feelT(self):print("原始人类如果热了,脱皮1")print(self.pty)print("原始人类如果冷了,扒别人的皮2")class Man(Human):# pty = 3def feelT(self):print("现代男人如果热了,脱衣服,脱裤子3")super().feelT()print("现代男人如果冷了,脱别人的衣服,脱别人的裤子4")class Woman(Human):# pty = 2def feelT(self):print("现代女人如果热了,吹空调,吃雪糕5")super().feelT()print("现代女人如果冷了,喝热水,用暖宝宝6")class Children(Man, Woman):# pty = 1def feelT(self):print("现代小孩如果热了,就哭7")super().feelT()print("现代小孩如果冷了,也要哭8")obj = Children()
obj.feelT()

73512648

# mro 列表: super用途的一个体现,解决复杂的多继承调用顺序关系
"""
类.mro() 返回的是方法调用顺序列表,针对于多继承下的同名方法,按照顺序依次的进行调用
"""
lst = Children.mro()
print(lst)
"""
[
<class '__main__.Children'>,
<class '__main__.Man'>,
<class '__main__.Woman'>,
<class '__main__.Human'>,
<class 'object'>
]
"""

issubclass 判断子父关系(应用在类当中,判断子父关系)
“”“只要在一条继承链上即可(有血缘关系)”""

res = issubclass(Children, Man)
print(res)  # True
res = issubclass(Children, Woman)
print(res)  # True
res = issubclass(Children, Human)
print(res)  # True
res = issubclass(Children, (Human, Woman, Man, OldWoman))
print(res)  # True
res = issubclass(Children, OldWoman)
print(res)  # False

isinstance(应用在对象和类之间,判断类型)
“”“只要在一条继承链上即可(有血缘关系)”""

res = isinstance(obj, Children)
print(res)  # True
res = isinstance(obj, Human)
print(res)  # True
res = isinstance(obj, (Human, Children, Woman))
print(res)  # True
res = isinstance(obj, OldWoman)
print(res)  # False

四.__init__魔术方法(构造方法)

"""触发时机:实例化对象,初始化的时候触发功能:为对象添加成员参数:参数不固定,至少一个self参数返回值:无
"""

1.基本语法

class MyClass():def __init__(self):print("初始化方法被触发")# 为当前对象self 添加成员 nameself.name = "袁文志"# 实例化对象
obj = MyClass()
print(obj.name)

2.带有多个参数的构造方法

class MyClass():def __init__(self, name):# self.成员名 = 参数self.name = name
# 实例化对象
obj = MyClass("宋云杰")  # 在实例化对象的时候,给构造方法传递参数
print(obj.name)

3.类可以是一个,对象可以是多个

“”“一个类可以实例化多个不同的对象,而对象和对象之间彼此独立,但都可以使用类中的公有的成员”""

class Children():def __init__(self, name, skin):self.name = nameself.skin = skindef cry(self):print("小孩一出生就哇哇哇的哭")def drink(self):print("小孩一出生就要喝奶奶")def __la(self):print("小孩拉粑粑是私有的")def pub_info(self):print("该对象的名字是{},该对象的肤色是{}".format(self.name, self.skin))
# 创建第一个小孩
afanda = Children("阿凡达", "蓝色的")
afanda.pub_info()  # 该对象的名字是阿凡达,该对象的肤色是蓝色的
afanda.cry()  # 小孩一出生就哇哇哇的哭# 创建第二个小孩
afanti = Children("阿凡提", "黄色的")
afanti.pub_info()  # 该对象的名字是阿凡提,该对象的肤色是黄色的
afanti.drink()  # 小孩一出生就要喝奶奶# 创建第三个小孩
bao = Children("我滴宝强", "绿色的")
bao.pub_info()  # 该对象的名字是我滴宝强,该对象的肤色是绿色的
# bao.__la()  # 无法在类外调用私有的成员

0804Python总结-单继承,多继承,菱形继承,__init__魔术方法(构造方法)相关推荐

  1. c/c++入门教程 - 2.4.6 继承、公共继承、保护继承、私有继承、virtual虚继承(概念、语法、方式、构造和析构顺序、同名成员处理、继承同名静态成员处理、多继承语法、菱形继承、钻石继承)

    目录 4.6 继承 4.6.1 继承的基本语法 4.6.2 继承方式 4.6.3 继承中的对象模型 4.6.4 继承中构造和析构顺序 4.6.5 继承同名成员处理方式 4.6.6 继承同名静态成员处理 ...

  2. 虚继承:解决菱形继承问题

    文章目录 一.菱形继承 二.菱形继承问题 三.虚继承:解决菱形继承问题 ```羊驼类继承的实际是两个虚基类指针 vbptr (virtual base pointer),``` 四.虚继承代码 一.菱 ...

  3. php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法

    原文:https://www.cnblogs.com/libolun/p/13434675.html 单继承 关于继承的一些基本概念 1.什么是子类?什么是父类?如果一个类继承另外一个类,该类叫做子类 ...

  4. c++中的继承--3(多继承问题,菱形继承)

    继承中的多继承 #include<iostream>using namespace std;class Base1 { public:Base1(){m_A = 10;} public:i ...

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

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

  6. 面向对象(继承,多态,单态,魔术方法)

    # ### 继承 """ 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 是一种继承关系 被继承的类叫做父类(基类,超类),继承的类叫做子类(衍生 ...

  7. python代码学习——类与对象提升(继承、超继承,类的例题,魔术方法)

    python代码学习--类与对象提升 继承 继承的特殊属性: 代码示例 方法的重写和覆盖(overrrid) 总结 超继承 继承中的初始化 多继承 例题 类的魔术方法 哈希(hash)和eq方法 bo ...

  8. 菱形继承与菱形虚拟继承

    菱形继承 单继承:一个子类只有一个直接父类时称这个继承关系为单继承 多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承 菱形继承:菱形继承是多继承的一种特殊情况. 来看看下面这段菱形继承的代 ...

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

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

  10. 【C++】继承详解,菱形继承问题

    继承体系 概念 继承方式 赋值兼容规则 同名隐藏 子类对象的构造过程 菱形继承 概念 是面向对象程序设计是代码可以复用的最重要的手段,它允许程序员在保持原有的类的特性的基础下进行拓展,增加功能. 这样 ...

最新文章

  1. robotframework的学习笔记(十二)------DatabaseLibrary 库
  2. synchronized能不能保证有序性??
  3. Tensorflow--Debug
  4. Java开源项目:Spring Integration
  5. 牛客题霸 [ 实现二叉树先序,中序和后序遍历]C++题解/答案
  6. js数组再倒数第二个添加元素_归纳JS中数组的使用(一)元素新增和删除
  7. git关闭密码自动存储_RobotFramework实战篇PC端web自动化demo及持续集成
  8. SAP打印出库单需求
  9. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-4.在线教育后台数据库设计...
  10. 20200724每日一句
  11. deepin/ubuntu 惠普星14 锐龙版本 安装RTL8821CE 无线网卡驱动
  12. 地球轨道计算方法,开普勒三大定律的证明,补充-解析几何之椭圆
  13. 计算机高级培训教师感言,教师信息技术培训感言信息技术培训心得多篇.docx
  14. 银行计算机岗社会招聘考什么题目,2020各大银行科技岗招聘考试考试内容是什么?...
  15. 名片 - 名片设计的比例
  16. 5G wifi 和 5G通信
  17. 练习六(归并排序、第k小元素、棋盘覆盖、大整数乘法)
  18. 提权-Windows操作系统
  19. Java的基本特性和优势
  20. 当人说君子动口不动手时怎么回怼_俗话说:“君子动口不动手。”那么到底什么样的人才称得上君子?...

热门文章

  1. Java实现分数排名算法_海量用户积分排名算法探讨(转)
  2. GaRy-Liang的linux成长日记8-RAID阵列
  3. 中国海洋大学计算机系实习报告,中国海洋大学海洋学实习报告.doc
  4. HBuilder手机Iphone运行提示“未受信用的企业级开发者”
  5. 红帽linux挂载光盘_redhat挂载光盘 命令 - 卡饭网
  6. Scheme 编程语言(1)介绍
  7. PYTHON通过高德API实现城市地址与经纬度批量转换(每十个一组查询)
  8. linux 启动服务 sys,从磁盘启动的过程与SYSLINUX
  9. 织梦栏目地址使用栏目名称首字母
  10. ios13一直在估算剩余时间怎么办