10+实战课程看透面向对象的三大特性:封装、继承和多态

简介: 面向对象编程,简单来说就是基于对类和对象的使用。本文来为大家介绍面向对象的三大特性——封装、继承、多态。

面向对象编程,简单来说就是基于对类和对象的使用。本文来为大家介绍面向对象的三大特性——封装、继承、多态。

封装

第一节:封装的简介

上一节我们讲过:直接通过 对象.属性 的方式来修改属性的值会导致对象中的属性可以随意修改,这是非常的不安全的:因为值可以任意修改,不论对错。

这里我们将介绍一种方法来更好的保护数据,保证数据的安全性:封装。

封装是面向对象的三大特性之一。

封装指的是隐藏对象中一些不希望被外部所访问到的属性或方法>>点击链接查看更多关于封装的内容

第二节:隐藏类中的属性

本文介绍了隐藏类中的属性的2种方法,避免外部可以随意访问。

并通过实际的案例详述了私有属性的建设和调用的方法>>点击链接了解详情

第三节:property装饰器

property装饰器,用来将一个get方法,转换为对象的属性,添加为property装饰器以后,我们就可以像调用属性一样使用get方法。

但是由于我们只提供了get方法而没有set方法,所以不能修改值。此时需要提供set方法进行修改。

要求:使用property装饰的方法,必须和属性名是一样的。>>点击链接了解更多

继承

第一节:继承简介

如果有一个类,能够实现我们需要的大部分功能,但是不能实现全部功能,那么如何能让这个类来实现全部的功能呢?
① 直接修改这个类,在这个类中添加我们需要的功能,这种方式修改起来会比较麻烦,并且会违反OCP原则。(开闭原则),我们不推荐使用这种方式。
② 创建一个新的类这是比较麻烦的,并且需要大量的进行复制粘贴,会出现大量的重复性代码。这种方式也不太适合。
③ 直接从父类中来继承它的属性和方法

  • 通过继承我们可以使一个类获取到其他类中的属性和方法
  • 在定义类时,可以在类名后的括号中指定当前类的父类(超类、基类、super),子类(衍生类)可以直接继承父类中的所有的属性和方法

那该如何用代码实现继承呢?>>点击链接查看详情

第二节:方法的重写override

如果在子类中如果有和父类同名的方法,则通过子类实例去调用方法时,会调用子类的方法而不是父类的方法,这个特点我们成为叫做方法的重写(覆盖,override)。可以确保在继承父类方法之后,自身还可以做出简单的修改。

同时注意:当我们调用一个对象的方法时,会优先去当前对象中寻找是否具有该方法,如果有则直接调用。如果没有,则去当前对象的父类中寻找,如果父类中有则直接调用父类中的方法,如果没有,则去父类的父类中寻找,以此类推,直到找到object,如果依然没有找到,则报错。>>点击链接了解更多

第三节:Python内置函数之super()

super() 函数是用于调用父类(超类)的一个方法。

它是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

当程序中的方法被写死,只能调用父类中的属性时,如果子类的父类更换,那么需要更新的代码是非常多的,所以就需要一个动态获取父类的方法。

super() 可以用来获取当前类的父类,并且通过super()返回对象调用父类方法时,不需要传递self。>>点击链接查看更多

第四节:多重继承

多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法。

在Python中是支持多重继承的,也就是我们可以为一个类同时指定多个父类。这是与别的大部分语言不一致的。但在开发中没有特殊的情况,应该尽量避免使用多重继承,因为多重继承会让我们的代码过于复杂。

注意:如果多个父类中有同名的方法,则会现在第一个父类中寻找,然后找第二个,然后找第三个......前边父类的方法会覆盖后边父类的方法。>>点击链接了解更多

多态

第一节:多态简介

多态是面向对象的三大特征之一。

多态从字面上理解是多种形态。例如:狗有多个种类(狼狗、藏獒、哈士奇、古代牧羊犬...)。

一个对象可以以不同的形态去呈现。>>点击链接了解多态的实现方法

第二节:类的属性和方法

在之前的课程中我们讲过为什么实例可以访问到类中的属性和方法?那是因为类中定义的属性和方法都是公共的,任何该类实例都可以访问。

当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性,如果有,则直接返回当前的对象的属性值,如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值,如果没有则报错!

在这里做一些深入的研究:静态方法不需要指定任何的默认参数,静态方法可以通过类和实例去调用 。

静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数。静态方法一般都是一些工具方法,和当前类无关。>>点击链接了解更多

第三节:Python的垃圾回收机制

就像我们生活中会产生垃圾一样,程序在运行过程当中也会产生垃圾。

程序运行过程中产生的垃圾会影响到程序的运行的运行性能,所以这些垃圾必须被及时清理。

什么是垃圾?在程序中没有被引用的对象就是垃圾,这种垃圾对象过多以后会影响到程序的运行的性能。所以我们必须进行及时的垃圾回收,所谓的垃圾回收就是讲垃圾对象从内存中删除。

在Python中有自动的垃圾回收机制,它会自动将这些没有被引用的对象删除,所以我们不用手动处理垃圾回收。

在Python中有一些特殊的方法可实现垃圾回收的功能,比如:init、del>>点击链接了解更多

第四节:Python中的魔术方法

特殊方法,也称为魔术方法。它们都是使用__开头和结尾的。例如: __init__、__del__`。

特殊方法一般不需要我们手动调用,需要在一些特殊情况下自动执行。

我们在需要的时候去调用就可以了。这些方法都是对多态的体现。>>点击链接了解更多内容

最后来简单的总结一下面向对象的三大特征:
封装:确保对象中的数据安全
继承:保证了对象的可扩展性
多态:保证了程序的灵活性

了解更多有关Python的内容,请订阅Python学习站官方技术圈!!

相关文章
|
资源调度 前端开发 API
Kiwi-国际化全流程解决方案
目前有很多成熟的库可以帮助前端去做对应的国际化方案,比较知名的有 react-intl 以及 I18N-loader。这些库都可以很好的解决代码中多种语言切换的问题
Kiwi-国际化全流程解决方案
|
人工智能 IDE JavaScript
Comate:百度智能云推出的基于大模型的代码编写助手
【2月更文挑战第13天】Comate:百度智能云推出的基于大模型的代码编写助手
376 2
Comate:百度智能云推出的基于大模型的代码编写助手
|
编解码 Java Maven
Java修改图片分辨率(附代码) | Java工具类
Java修改图片分辨率(附代码) | Java工具类
Java修改图片分辨率(附代码) | Java工具类
|
6月前
|
机器学习/深度学习 资源调度 算法
【图像去噪的滤波器】非局部均值滤波器的实现,用于鲁棒的图像去噪研究(Matlab代码实现)
【图像去噪的滤波器】非局部均值滤波器的实现,用于鲁棒的图像去噪研究(Matlab代码实现)
238 2
|
关系型数据库 分布式数据库 数据库
PolarDB 开源基础教程系列 9 开源社区合作和共建
本文介绍了玩转 PolarDB 开源社区指南:如何搭建 PolarDB 开发环境及参与开源社区。 主要内容: 1. **搭建开发环境**:提供多种 Docker 镜像供开发者选择,支持 x86_64 和 ARM64 架构,适配 CentOS、Debian、Ubuntu 等多个 Linux 发行版。 2. **编译与部署**:通过 Docker 容器克隆 PolarDB 源码并编译安装,支持构建一写多读集群测试 ePQ MPP 优化器功能。 3. **参与开源社区**:介绍个人、生态伙伴和用户如何从社区中获取技能、建立连接、积累战绩并提升影响力。社区活动涵盖公开课、训练营、编程大赛、企业行等。
553 7
|
XML Java Android开发
FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer
GSYVideoPlayer是一款国产移动端视频播放器,支持弹幕、滤镜、广告等功能,采用IJKPlayer、Media3(EXOPlayer)、MediaPlayer及AliPlayer多种内核。截至2024年8月,其GitHub星标数达2万。集成时需使用新版Android Studio,并按特定步骤配置依赖与权限。提供了NormalGSYVideoPlayer、GSYADVideoPlayer及ListGSYVideoPlayer三种控件,支持HLS、RTMP等多种直播链接。
605 18
FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer
|
Ubuntu Linux
Ubuntu Linux
背景 Ubuntu起源于南非,其名称“Ubuntu”来源于非洲南部祖鲁语或豪萨语,意为“人性”、“我的存在是因为大家的存在”,这体现了非洲传统的一种价值观。Ubuntu由南非计算机科学家马克·沙特尔沃斯(Mark Shuttleworth)创办,他创立了Canonical公司来推动Ubuntu的发展。Ubuntu的第一个版本于2004年发布,至今已经走过了近20个年头,成为了Linux发行版中的佼佼者。
462 4
Ubuntu Linux
|
前端开发
前端基础(十一)_Float浮动、清除浮动的几种方法
本文介绍了浮动的概念、属性、特性以及清除浮动的几种方法,并通过实例演示了如何使用CSS实现元素的浮动和处理浮动带来的问题。
683 3
|
数据采集 前端开发 Java
@ControllerAdvice:你可以没用过,但是不能不了解
`@ControllerAdvice` 是 Spring MVC 中用于定义全局行为的注解,如异常处理、数据绑定和预处理。它从 `@Component` 派生,确保被扫描并纳入容器。`@ExceptionHandler` 用于全局异常处理,提供统一的错误响应。例如,当处理不当的异常时,它能返回友好的错误信息。`@InitBinder` 在数据绑定前对参数进行处理,如格式转换。`@ModelAttribute` 可以用于全局绑定模型属性,如登录用户信息。Spring MVC 通过 `DispatcherServlet` 和 `HandlerAdapter` 在请求处理流程中应用这些全局配置。
889 3
@ControllerAdvice:你可以没用过,但是不能不了解
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
294 0

热门文章

最新文章