Python入门学习篇(十七)——封装、继承、多态

1 封装

1.1 理解

属性和方法书写到类里面的操作即为封装
封装可以理解成私有化属性和私有化方法

1.2 示例代码

class Person():
    p_num = 0  # 用于统计数量

    def __init__(self, name, age, sex, job):
        # __name为私有化属性
        self.__name = name
        self.age = age
        self.sex = sex
        self.job = job

    # 调用私有化属性的方法
    def get_name(self):
        return self.__name

    # 修改私有化属性的方法
    def set_name(self, name):
        self.__name = name

    def eat(self):
        print("吃饭")

    # 私有化方法
    def __sleep(self):
        print("睡觉")

    # 通过公开方法简介调用私有化方法
    def show_sleep(self):
        self.__sleep()


chinese_teacher = Person("张三", 24, "男", "语文老师")
print(f"name的值为: {chinese_teacher.get_name()}")
chinese_teacher.show_sleep()

1.3 运行截图

在这里插入图片描述

2 继承

2.1 理解

子类可以继承父类的所有非私有属性和方法
为了使代码更加简洁

2.2 分类

2.2.1 常规继承

a 语法

class 类A():
    # 类A的属性和方法
class 类B(类A):
    # 类B的属性和方法
# 注意: 类B中拥有类A的所有非私有属性和非私有方法

b 示例代码

class Animal():
    def __init__(self, name, sex, age):
        print("父类的构造方法")
        self.name = name
        self.sex = sex
        self.__age = age

    def get_age(self):
        return self.__age

    def set_age(self, age):
        self.__age = age

    def behavior(self):
        print("动物的叫声")


class Cat(Animal):
    def __init__(self, name, sex, age):
        print("子类的构造方法")
        # 调用父类的构造方法
        super().__init__(name, sex, age)

    # 当子类重写父类的方法时,子类实例化对象调用的是自己的方法
    def behavior(self):
        print("喵喵喵")


cat = Cat("小金", "雄性", 5)
cat.behavior()

c 运行截图

在这里插入图片描述

2.2.2 继承传递

a 语法

class 类A():
    # 类A的属性和方法
class 类B(类A):
    # 类B的属性和方法
class 类c(类B):
    # 类c的属性和方法
# 注意: 类B中拥有类A的所有非私有属性和非私有方法
# 注意: 类C中拥有类A的所有非私有属性和非私有方法、类B的所有非私有属性和非私有方法
# 实际上可以理解为类C继承了类B中拥有的所有非私有属性和非私有方法(包含类B自己继承的)

b 示例代码

class Animal():
    def __init__(self, name, sex, age):
        print("父类的构造方法")
        self.name = name
        self.sex = sex
        self.__age = age

    def get_age(self):
        return self.__age

    def set_age(self, age):
        self.__age = age

    def behavior(self):
        print("动物的叫声")

    def __str__(self):
        return f"姓名为: {self.name},性别为:{self.sex},年龄为:{self.__age}"

    def describe(self):
        return self.__str__()


class Cat(Animal):
    num = 0  # 数量

    def __init__(self, name, sex, age):
        print("子类的构造方法")
        # 调用父类的构造方法
        super().__init__(name, sex, age)
        self.num += 1

    # 当子类重写父类的方法时,子类实例化对象调用的是自己的方法
    def behavior(self):
        print("喵喵喵")


# DragonLi是狸花猫的意思
class DragonLi(Cat):
    def __init__(self, name, sex, age):
        print("孙类的构造方法")
        # 调用父类的构造方法
        super().__init__(name, sex, age)
    def behavior(self):
        print("出去玩耍了")


cat = DragonLi("小金", "雄性", 5)
print("修改前: ", cat.describe())
cat.set_age(6)
print("修改后: ", cat.describe())
cat.behavior()
print("当前猫的数量为:", cat.num)

c 运行截图

在这里插入图片描述

2.2.3 多继承(继承多个不同父类)

a 语法

class 类A():
    # 类A的属性和方法
class 类B():
    # 类B的属性和方法
class 类C(类A,类B):
    # 类C的属性和方法
# ①当类A和类B存在同名方法时,类C调用时采用就近原则,即类c定义的括号中,哪个类在前面就调用哪个类的方法 
#   例如 class 类C(类A,类B)时,调用的就是类A中的同名方法 
# ②当类A、类B、类C均存在同名方法时,类c实例化对象调用时,调用的是类C自己的方法
# ③类c中含有类A、类B的所有非私有属性和非私有方法

b 示例代码

class Animal():
    def __init__(self, name, sex, age):
        print("父类的构造方法")
        self.name = name
        self.sex = sex
        self.__age = age

    def get_age(self):
        return self.__age

    def set_age(self, age):
        self.__age = age

    def behavior(self):
        print("动物的叫声")

    def __str__(self):
        return f"姓名为: {self.name},性别为:{self.sex},年龄为:{self.__age}"

    def describe(self):
        return self.__str__()
    def eat_food(self):
        print("以有机物为食")
class Fly():
    # tool是代表飞翔的工具
    def __init__(self,tool):
        self.tool=tool

    def behavior(self):
        print("芜湖起飞")
    def fly_reason(self):
        print("符合空气动力学原理")


class Bird(Animal,Fly):
    num = 0  # 数量

    def __init__(self, name, sex, age):
        print("子类的构造方法")
        # 调用父类的构造方法
        super().__init__(name, sex, age)
        self.num += 1

    # # 当子类重写父类的方法时,子类实例化对象调用的是自己的方法
    # def behavior(self):
    #     print("叽叽喳喳")



bird = Bird("小红", "雄性", 5)
print("修改前: ", bird.describe())
bird.set_age(6)
print("修改后: ", bird.describe())
# 调用的是Animal父类中的behavior方法
bird.behavior()
bird.eat_food()
bird.fly_reason()

c 运行截图

在这里插入图片描述

3 多态

3.1 语法

对象=父类(子类实例化对象)
# 多态的实现步骤如下所示:
#   ①定义父类,并提供公共方法
#   ②定义子类,并重写父类方法
#   ③传递子类对象给调用者,可以看到不同子类执行效果不同

3.2 示例代码

# 一户人家养了两只不同的品种的猫,一只是狸花猫,一只是橘猫,狸花猫喜欢出去打架、橘猫喜欢干饭
class Cat():
    def __init__(self, name, sex):
        self.name = name
        self.sex = sex

    def behavior(self):
        print("猫的行为")


# 狸花猫
class DragonLi(Cat):
    def __init__(self, name, sex):
        super().__init__(name, sex)

    def behavior(self):
        print(f"品种为狸花猫的{self.name}喜欢出去打架")


# 橘猫
class OrangeCat(Cat):
    def __init__(self, name, sex):
        super().__init__(name, sex)

    def behavior(self):
        print(f"品种为橘猫的{self.name}喜欢干饭")


class Person():
    # 发现猫的行为特点,根据传入的不同的obj对象,调用不同的方法
    def search_attitude(self, obj):
        obj.behavior()


d = DragonLi("小花", "雄性")
o = OrangeCat("小黄", "雌性")
p = Person()
p.search_attitude(d)
p.search_attitude(o)

3.3 运行截图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/288697.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一种可扩展的多属性可控文本生成即插即用方法

《An extensible plug-and-play method for multi-aspect controllable text generation》论文解读 文章的主要工作 (1)提出了一种可扩展的即插即用方法,PROMPT GATING,用于多方面可控文本生成,它能够通过简单地连接…

引导和服务

一、Linux操作系统引导过程 1、引导过程总览图 2、引导过程的详细步骤 1.开机自检(BIOS) 服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权&a…

【MySQL】数据库之主从复制和读写分离

目录 一、什么是读写分离? 二、为甚要读写分离? 三、什么时候需要读写分离? 四、主从复制与读写分离 五、MySQL支持的二进制日志格式 六、主从复制的工作原理 七、MySQL读写分离的原理 八、MySQL读写分离的方式有哪些 九、实验一&am…

Windows 7 虚拟机的安装以及解决安装VMVMware tools问题

1.Windows 7 虚拟机的安装以及解决安装VMVMware tools问题 参考:Windows 7 虚拟机的安装以及解决安装VMVMware tools问题 注意:下载官方补丁:Microsoft Update Catalog在智慧联想浏览器中打不开,要在火狐中才能打开下载。 2.win7如…

Navicat(数据库可视化软件)安装教程以及连接MYSQL

Navicat安装教程以及连接MYSQL Navicat(数据库可视化软件)安装流程安装MySQLnavicat连接mysql数据库 Navicat(数据库可视化软件) Navicat 是一款专门为 MySQL 设计的可视化数据库 GUI 管理工具,我们可以在自己的计算机…

【HarmonyOS开发】共享包HAR和HSP的创建和使用以及三方库的发布

OpenHarmony提供了两种共享包,HAR(Harmony Archive)静态共享包,和HSP(Harmony Shared Package)动态共享包。 HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C库、资源和配置文件&…

Windows可以ping通ubuntu,但ubuntu无法ping通windows

使用了NAT网卡和桥接网卡,电脑连了WiFi,桥接网卡桥接到WLAN上,Windows可以ping通Ubuntu但反过来不行! 1.可能是防火墙的问题,按照如下设置,无果 考虑是不是使用了两个网卡冲突了,取消NAT的链接 …

【Mybatis】Mybatis如何防止sql注入

🍎个人博客:个人主页 🏆个人专栏: Mybatis ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 1、使用参数化的 SQL 语句: 2、使用动态 SQL 标签: 3、禁止拼接 SQL: 4、限制参数类…

SkyWalking 快速入门

SkyWalking 是一个基于 Java 开发的分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。 一、SkyWalking 简介 SkyWalking 是观察性分析平台和应用性能管理系统。 提供分布式追踪、服务网格…

SpringBoot的基础配置

问题导入 入门案例中没有引入spring-webmvc等依赖包,没有配置Tomcat服务器,为什么能正常启动?我们没有配置端口号,为什么端口是8080? 起步依赖 starter SpringBoot中常见项目名称,定义了当前项目使用的所…

AUTOSAR软件架构描述文档,AUTOSAR_EXP_LayeredSoftwareArchitecture

AUTOSAR软件架构描述文档,我们常见的经典的CP架构及OS双核等架构描述 下载链接:https://www.autosar.org/fileadmin/standards/R21-11/CP/AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf

71.乐理基础-打拍子-三连音的变体

上一个内容:70.乐理基础-打拍子-三连音-CSDN博客 首先常见的三连音如下图的样子: 三连音的变体遇到的次数并不会很多,可以不用看不用懂 三连音的变体: 1.三连音节奏型依然有可能藏有休止符,如下图 2.在这之前的三连音…

Java LinkedList解密

一、LinkedList最底层的原理 LinkedList其实底层是链表: 当初始化的时候,会将链表这个节点的值、prev指针和next指针初始化。 二、LinkedList初始化 无参构造并没有做什么。有参构造会先调用无参构造,然后调用addAll方法将链表的节点都初始化…

基于花授粉算法优化的Elman神经网络数据预测 - 附代码

基于花授粉算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于花授粉算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于花授粉优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#x…

C++ 多态向上转型详解

文章目录 1 . 前言2 . 多态3 . 向上转型4 . 总结 【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 此篇博文详解C的多态向上转型平台 : Qt 2 . 多态 【Q】什么是多态? 【A】解释如下 : 通俗来说,就是多种形态,具体…

八皇后问题(C语言/C++)超详细讲解/由浅入深---深入八皇后问题

介绍引入 在计算机科学中,八皇后问题是一个经典的回溯算法问题。这个问题的目标是找出一种在8x8国际象棋棋盘上放置八个皇后的方法,使得没有任何两个皇后能够互相攻击。换句话说,每一行、每一列以及对角线上只能有一个皇后。 想象一下&…

C++多态性——(3)动态联编的实现——虚函数

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 成功的秘诀就在于多努力一次&#xff…

Sam Altman的一天被曝光!每天15小时禁食、服用小剂量安眠药,尽可能避免开会

Sam Altman在经历了几天混乱的管理重组后,重新回到了OpenAI的CEO位置。在日常生活中,奥特曼与许多科技行业高管一样,痴迷于延长自己的寿命。 据报道,他还为应对末日场景(致命合成病毒的释放、核战争和人工智能攻击等&…

【AIGC摄影构图prompt】与重不同的绘制效果,解构主义+优美连拍提示效果

提取关键词构图: 激进解构主义 在prompt中,激进解构主义的画面效果可能是一种颠覆传统和权威的视觉呈现。这种画面可能以一种极端或激烈的方式表达对现有社会结构和观念体系的批判和质疑。 具体来说,这种画面效果可能包括: 破…

流媒体学习之路(WebRTC)——Pacer与GCC(5)

流媒体学习之路(WebRTC)——Pacer与GCC(5) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全…