IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python进阶-----十九课(下)--继承 -> 正文阅读

[Python知识库]python进阶-----十九课(下)--继承

python进阶,在第一期的基础上做了极大的优化,整体更加美观易懂
内容较多(该篇幅超过4000字),分为上下两个篇幅,此篇是下

十九、继承 ()

19.2、多层继承

多层继承.新增一个类

class Fath_1(object):
    def __init__(self):
        self.back_fatc = "张三的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学走了")


class Fath_2(object):
    def __init__(self):
        self.back_fatc = "张三徒弟的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学会了")


class Su(Fath_1, Fath_2):  # 有几个父类加几个父类,(同名情况下)哪一个父类在前子类就优先继承哪一个父类
    def __init__(self):
        self.back_fatc = "自创的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学会了")

    def make_fath_1(self):  # 把父类的同名属性和方法再次封装
        # 方法:父类类名.函数名
        Fath_1.__init__(self)
        Fath_1.zi_0(self)
        # print(self)

    def make_fath_2(self):  # 把父类的同名属性和方法再次封装
        # 方法:父类类名.函数名
        Fath_2.__init__(self)  # 如果不加init方法,优先去使用子类中的同名属性
        Fath_1.zi_0(self)  # 如果想要把wangwu这个对象去调用这个同名方法,就需要把对象的引用(self)传入
        # print(self)

# 多层继承
class Duocen(Fath_1):
    pass

chenliu = Su()

chenliu.zi_0()
chenliu.make_fath_1()
chenliu.make_fath_2()
# 结果:
>>> 自创的拿手手艺我学会了
>>> 张三的拿手手艺我学走了
>>> 张三徒弟的拿手手艺我学走了

所谓的多层继承就是你继承给我,我继承给他

19.3、super()

super():调用父类方法

作用:简化调用父类方法的代码
注意:使用super()可以自动查找父类,调用顺序遵循__mro__类属性的顺序,比较适合单继承使用

19.3.1、super() 有参

class Fath_1(object):
    def __init__(self):
        self.back_fatc = "张三的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学走了")


class Fath_2(Fath_1):
    def __init__(self):
        self.back_fatc = "张三徒弟的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学会了")
        # 有参——>super(当前类名, self).函数()
        super(Fath_2, self).__init__()
        super(Fath_2, self).zi_0()

class Su(Fath_2):  # 有几个父类加几个父类,(同名情况下)哪一个父类在前子类就优先继承哪一个父类
    def __init__(self):
        self.back_fatc = "自创的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学会了")
    def make_fatc(self):
        # 使用super()重名的方法去实现一次性调用父类中的同名属性
        # 有参——>super(当前类名, self).函数()
        super(Su, self).__init__()
        super(Su, self).zi_0()

wangwu = Su()
wangwu.zi_0()
wangwu.make_fatc()
# 结果:
>>> 自创的拿手手艺我学会了
>>> 张三徒弟的拿手手艺我学会了
>>> 张三的拿手手艺我学走了

19.3.2、super() 无参

class Fath_1(object):
    def __init__(self):
        self.back_fatc = "张三的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学走了")


class Fath_2(Fath_1):
    def __init__(self):
        self.back_fatc = "张三徒弟的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学会了")
        # 无参——>super()
        super().__init__()
        super().zi_0()

class Su(Fath_2):  # 有几个父类加几个父类,(同名情况下)哪一个父类在前子类就优先继承哪一个父类
    def __init__(self):
        self.back_fatc = "自创的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学会了")
    def make_fatc(self):
        # 使用super()重名的方法去实现一次性调用父类中的同名属性
        # 无参——>super()
        super().__init__()
        super().zi_0()

wangwu = Su()
wangwu.zi_0()
wangwu.make_fatc()
# 结果:
>>> 自创的拿手手艺我学会了
>>> 张三徒弟的拿手手艺我学会了
>>> 张三的拿手手艺我学走了

19.4、私有属性和私有方法

> 私有权限:在python中,可以为实例属性和方法设置私有权限,即设置某个实例属性或实例方法不继承给子类
> 方法:在属性名和方法名前面加上两个下划线__
获取和修改私有属性值:在python中,一般定义函数名etg_xx用来获取私有属性,定义set_xx用来修改私有属性值
class Fath_1(object):
    def __init__(self):
        self.back_fatc = "张三的拿手手艺"
    def zi_0(self):
        print(f"{self.back_fatc}我学走了")


class Fath_2(object):
    def __init__(self):
        # 共有权限
        self.back_fatc = "张三徒弟的拿手手艺"
        # 私有权限
        self.__money = "200亿"
    def zi_0(self):
        print(f"{self.back_fatc}我学会了")

    def info_printf(self):
        print("这是私有方法")


class Duocen(Fath_2):
    pass

tom = Duocen()
print(tom.back_fatc)
# print(tom.__money)  # 报错
tom.info_printf()
# 结果:
>>> 张三徒弟的拿手手艺
>>> 这是私有方法
class Fath_1(object):
    def __init__(self):
        self.back_fatc = "张三的拿手手艺"

    def zi_0(self):
        print(f"{self.back_fatc}我学走了")


class Fath_2(object):
    def __init__(self):
        # 共有权限
        self.back_fatc = "张三徒弟的拿手手艺"
        # 私有权限
        self.__money = "200亿"

    # 获取私有属性值:一般定义函数名get__xx
    def get_money(self):
        return self.__money

    # 修改私有属性值:一般定义函数名set__xx
    def set_moner_1(self):
        self.__money = "300亿"


    def __info_print(self):
        print("这是私有方法")

    def Abc(self):
        return self.__info_print()

class Duocen(Fath_2):
    pass



tom = Duocen()
print(tom.get_money())  # 获取私有属性值
tom.set_moner_1()       # 修改私有属性值
print(tom.get_money())  # 获取私有属性值
tom.Abc()
# 结果:
>>> 200亿
>>> 300亿
>>> 这是私有方法
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:42:14  更:2022-05-01 15:43:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:03:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码