Python中的封装、继承与多态

news2024/7/6 20:02:25

1. 前言

面向对象的三大特性,想必大家肯定是耳熟能详。就是今天要介绍的内容:封装、继承、多态。面向对象的思想都是一样的,这里我用Python进行实现!

2. 封装

2.1 什么是封装呢?

封装就是:我写了一个类,我将一个类的属性、方法全部包装到了一个类中。我对类中某些方法和属性进行了隐藏,(外部实例化之后,无法通过对象.方法或对象.属性来进行直接调用)。因为我不想让外部了解我的实现机理或属性,但是会留出一些公开的方法来供外部间接调用这些“封装”好的属性和方法!这就是封装!!!

# coding:utf-8

class Parents(object):
    __name = "kaka"
    __age = 35
    job = "teacher"

    def __hobby(self):
        print("pingpong")

    # 调用私有方法hobby
    def get_hobby(self):
        self.__hobby()

    # 获取年龄
    def get_age(self):
        return self.__age

    # 获取姓名
    def get_name(self):
        return self.__name


if __name__ == "__main__":
    # 实例化
    p = Parents()
    # 调用封装好的私有属性
    print(p.name)
    print(p.__name)

报错,无法直接调用
在这里插入图片描述
私有方法也无法调用

# coding:utf-8

class Parents(object):
    __name = "kaka"
    __age = 35
    job = "teacher"

    def __hobby(self):
        print("pingpong")

    # 调用私有方法hobby
    def get_hobby(self):
        self.__hobby()

    # 获取年龄
    def get_age(self):
        return self.__age

    # 获取姓名
    def get_name(self):
        return self.__name


if __name__ == "__main__":
    # 实例化
    p = Parents()
    # 调用封装好的私有方法
    p.hobby()

报错,无法直接调用
在这里插入图片描述

# coding:utf-8

class Parents(object):
    __name = "kaka"
    __age = 35
    job = "teacher"

    def __hobby(self):
        print("pingpong")

    # 调用私有方法hobby
    def get_hobby(self):
        self.__hobby()

    # 获取年龄
    def get_age(self):
        return self.__age

    # 获取姓名
    def get_name(self):
        return self.__name


if __name__ == "__main__":
    # 实例化
    p = Parents()
    # 通过留出来的公有方法进行获取封装好的属性
    print(p.get_name())
    print(p.get_age())

    # 通过留出来的公有方法进行调用封装好的方法
    p.get_hobby()

输出

kaka
35
pingpong

3.继承

3.1什么是继承?

字面意思就是,一个类是另一个类的子类,那么这个类就可以拥有和父类一样的属性、方法。这就好比是现实当中,儿子会遗传父亲的性格、长相等。

3.2 单继承

单继承就是,这个类只继承了一个父类,只拥有一个父类的属性和方法。

# coding:utf-8

# 父类
class Father(object):
    sex = "male"
    job = "teacher"
    age = 35
    surname = "Zhang"

    def run(self):
        print("running...")

    def hobby(self):
        print("basketball")

# 子类
class Son(Father):
    job = "student"
    age = 10

    def hobby(self):
        print("swimming...")



if __name__ == "__main__":
    s = Son()
    # 继承了父亲的性别和姓氏
    print(s.sex)
    print(s.surname)

输出

male
Zhang

3.3多继承

多继承就是当前子类继承了多个父类,这样就拥有了多个父类的属性和方法。如果父类有相同的属性和方法,优先继承靠前父类的属性和方法。

# coding:utf-8

# 父类
class Father(object):
    sex = "male"
    job = "teacher"
    age = 35
    surname = "Zhang"

    def run(self):
        print("running...")

    def hobby(self):
        print("basketball")

# 母亲类
class Mother(object):
    sex = "female"
    job = "doctor"
    age = 35
    surname = "Li"

    def run(self):
        print("running...")

    def hobby(self):
        print("pingpong")

    def test(self):
        print("hello")



# 多继承,先继承了Father类,然后继承了Mother类
class Son(Father, Mother):
    job = "student"
    age = 10



if __name__ == "__main__":
    s = Son()
    # 两个父类里面都有surname和sex
    # 因为先继承的Father类,所以表现的是Father类的属性
    print(s.surname, s.sex)

    # 因为先继承的Father类,所以表现的是Father类的方法
    s.hobby()
    # 继承了Mother类的test方法
    s.test()

输出

Zhang male
basketball
hello

4.多态

4.1 什么是多态?

举一个现实中的例子,同样的一件事情,不同的人处理起来,他们的实现过程是完全不同的,会表现出不同的形态。比如:都是吃饭这个事情,中国人表现的是用筷子吃饭,而美国人表现的是用叉刀吃饭。这个就是相同的事情,表现出了不同的“形态”。
总结一句话就是:将不同的对象传入同一函数中,表现出不同的形态,这就是多态。

4.2 多态的注意点

  • 多态的前提是:继承、重写。
  • 多态指的是方法的多态,多态与属性无关。

4.3代码示例

# coding:utf-8

# 父类
class Father(object):
    def __init__(self, sex, job, age, surname):
        self.sex = sex
        self.job = job
        self.age = age
        self.surname = surname

    def run(self):
        print("running...")

    def hobby(self):
        print("basketball")

# 子类1
class Son(Father):
    def __init__(self, sex, job, age, surname, school_name):
        # 调用父类现有方法
        super().__init__(sex, job, age, surname)
        # 进行扩展
        self.school_name = school_name
    # 重写
    def hobby(self):
        print("swimming")


# 子类2
class Daughter(Father):
    def __init__(self, sex, job, age, surname, school_name):
        # 调用父类现有方法
        super().__init__(sex, job, age, surname)
        # 进行扩展
        self.school_name = school_name

    # 重写
    def hobby(self):
        print("drawing")

# 获取爱好
def get_hobby(obj):
    obj.hobby()

if __name__ == "__main__":
    s = Son(sex="male", job="student", age=10, surname="Zhang", school_name="CHD")
    d = Daughter(sex="female", job="student", age=12, surname="Zhang", school_name="CHD")
    # 将s、d两个对象传入相同的函数get_hobby
    get_hobby(s)
    get_hobby(d)

输出

swimming
drawing

以上就是python中的封装,继承,多态的介绍,希望对你有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【T6/T3】根据畅捷通T6/T3账套备份文件判断软件的版本

【问题需求】 当畅捷通T6/T3软件只有正常的账套备份文件的时候, 通过账套备份文件判断软件版本, 进而安装软件恢复数据。 【解决方法】 【畅捷通T6】 找到T6的备份文件, 用记事本打开【UfErpAct.lst】文件。 查看【VersionbatchflagForUFDAT…

【linux】web基础与HTTP协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 web基础与HTTP协议 一、DNS/HTML1.域名的概述2.域名注册3.网页的概念4.HTML概述5.网页基本标签 二、web基础1.web概述2.静态网页3.静态网页特点4.动态网页5.动态网页的特点 三…

软件开发SOLID设计原则

前言:SOLID设计原则,不管是软件系统还是代码的实现,遵循SOLID设计原则,都能够有效的提高系统的灵活和可靠性,应对代码实现的需求变化也能更好的扩展和维护。因此提出了五大原则——SOLID。 我是通过老师讲解以及老师…

【深入浅出Spring Security(三)】默认登录认证的实现原理

Spring Security 默认登录认证的实现原理 一、默认配置登录认证过程二、流程分析登录页面的由来表单登录认证过程(源码分析) 三、UserDetailsServiceSpring Security 中 UserDetailsService 的实现默认的 UserDetailsService 配置(源码分析&a…

【送书福利-第七期】《分布式中间件核心原理与RocketMQ最佳实践》

大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! 本文目录 一、前言二、内容介绍三、作者介…

孪生诱捕网络在欺骗防御领域的应用

随着以数字化、网络化和智能化为特征的信息化浪潮的蓬勃兴起,信息已经成为重要的战略资源与重要生产要素,在国家的发展和人们的生产生活中起到至关重要的作用。信息化在给人们带来便利的同时,网络信息安全问题也日益凸显。经过多年的网络安全…

【Linux】Linux 文件系统与设备文件

Ref: 《Linux设备驱动开发详解:基于最新的Linux4.0内核》中的第5章《Linux 文件系统与设备文件》 基于Linux 5.10 本文结合源码和实例分析了Linux 文件系统与设备文件,主要介绍文件系统的构成和发展,以及三种虚拟文件系统debugfs procfs sysf…

《微服务实战》 第二十七章 CAS

前言 本章节介绍CAS 1、CAS的概念 CAS的全称为:CompareAndSwap,直译为对比和交换。 CAS实际是普遍处理器都支持的一条指令,这条指令通过判断当前内存值V、旧的预期值A、即将更新的值B是否相等来对比并设置新值,从而实现变量的原子性。 Syn…

二进制安装Kubernetes(K8s)集群---从零安装教程(带证书)

一、实验环境 1、安装说明 selinux iptables off 官方网站:https://kubernetes.io/zh-cn/docs/home 主机名IP系统版本安装服务master0110.10.10.21rhel7.5nginx、etcd、api-server、scheduler、controller-manager、kubelet、proxymaster0210.10.10.22rhel7.5nginx、…

【细读Spring Boot源码】Spring如何获取一个Bean?BeanFactory的getBean方法

前言 在读refresh(context);时,finishBeanFactoryInitialization(beanFactory);中beanFactory.preInstantiateSingletons();用于实例化剩余所有的non-lazy-init的单例。这里包含了前置处理器和后置处理器 这里面就用到了本文主题getBean(beanName); 下面具体看看这…

4.数据结构期末复习之树

1.树的概念(一对多)(要求会写遍历序列) 1)n>个节点,n0时为空树2)仅有一个根节点3)左右节点互不相交,子节点一对多2.树的特点 1.子树之间没有关系 2.节点不属于多个子树(一个节点只能在一颗子树里面)3.没有回路(就是成环)4.有层次性3.术语 1.节点的度:拥有子树的个数…

ArcGIS教程——ArcGIS快速入门

实例数据:https://pan.baidu.com/s/184wwCmWrJdb-qjxsT614EQ 密码:dowv ArcGIS for Desktop是一套完整的专业GIS应用程序,包含有ArcMap、ArcCatalog、ArcToolbox、ArcScense、ArcGlobe和Model Builder等。其中ArcMap、ArcCatalog、ArcToolbo…

Unreal Niagara粒子入门3 - 根据模型顶点发射粒子

在一些游戏中经常会出现根据模型顶点位置发射粒子的情况,这次就来实现一下该效果: 1.基础创建操作 首先从空粒子发射器开始创建,右键NiagaraSystem->Create empty system,打开粒子系统后再右键Add empty emitter&#xff1a…

【智能软件安全】上海道宁为您带来智能软件安全平台——​Veracode,帮助您全面地保护您构建和管理地应用程序

Veracode可以全面地 保护您构建和管理地应用程序 在现代软件 开发生命周期的 每个阶段不断发现并修复缺陷 Veracode通过 建立一种在安全和开发团队之间 架起桥梁并授权 开发人员成为 安全倡导者的积极文化 从一开始就防止常见的安全漏洞 开发商介绍 Veracode成立于20…

腾讯云8核16G服务器18M带宽CPU性能可支撑多少人同时在线?

腾讯云8核16G轻量服务器CPU性能如何?18M带宽支持多少人在线?轻量应用服务器具有100%CPU性能,18M带宽下载速度2304KB/秒,折合2.25M/s,系统盘为270GB SSD盘,月流量3500GB,折合每天116.6GB流量&…

【CocosCreator入门】CocosCreator组件 | TiledMap(地图)组件

Cocos Creator是一款流行的游戏开发引擎,具有丰富的组件和工具,其中TiledMap组件可以帮助开发者快速创建、加载和渲染地图。 目录 一、组件介绍 二、组件属性 三、脚本控制 3.1加载地图 3.2渲染地图 四、详细说明 五、关闭裁剪 六、节点遮挡 一、…

Linux中与进程间通信相关的内核数据结构

【摘要】本文详细讲述了Linux内核中与进程间通信概念相关的内核数据结构及其内在联系。 九、进程间通信(IPC)相关数据结构 9.1 ipc_namespace 从内核版本2.6.19开始,IPC机制已经能够意识到命名空间的存在,但管理IPC命名空间比较简单,因为它…

VR教育:让教育“可视化”,开启元宇宙教学之路

放眼世界,有不少高等教育学校都已经开始了元宇宙教学之路,为了从根本上解决目前课堂教学中存在的问题,进一步提高课堂教学质量,VR教育就可以很好地完善这些方面。 传统教育并不能让学生很好地沉浸在真实知识环境中,在一…

连锁门店运营管理系统有哪些功能?该如何选购?

连锁门店运营管理过程中,面临诸多难题,比如不同门店分布在不同地区,管理分散;各门店的人员管理、绩效考核、销售数据等工作进行困难;很难保证产品和服务的标准化管控。 连锁店只有不断适应市场变化,趁早选择…

不用运算符的加法运算

一.不用运算符的加法 1.题目描述 设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 力扣:力扣 2.问题分析 1.知识预备 注意:下面所有的结论的进位是考虑二进制的进位,因为我们使用的位运算符,是针对二进制进行的. 结论一:在不考虑进位的情况下,其无…