在 Python 编程中,面向对象编程的核心概念包括哪些部分?

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


在 Python 编程中,面向对象编程(Object-Oriented Programming,OOP)的核心概念主要包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)、多态性(Polymorphism)和抽象(Abstraction)。这些概念共同构成了面向对象编程的基础,使得 Python 程序设计更加灵活和易于管理。

  • 类(Class):类是创建对象的蓝图或模板。它定义了一组属性(变量)和方法(函数),这些属性和方法将被对象所共享。类仅仅定义了属性和方法的结构,并不直接占用内存空间。例如,你可以定义一个 Dog 类,其中包含属性如 name、age 和方法如 bark()。

  • 对象(Object):对象是类的实例化结果,每个对象都拥有类中定义的属性和方法。依据上述例子,你可以创建多个 Dog 对象,每个对象都有自己的 name 和 age 属性值。

  • 封装(Encapsulation):封装是指保护对象中的数据不被外界随意访问的机制。它的主要目的是隐藏对象的内部状态和实现细节,仅仅通过一个定义良好的接口与外界交互。这样做不仅有助于保护数据免受外部干扰和误用,还能使得代码更加模块化,增强代码的可读性、可维护性和重用性。代码示例见最后。

  • 继承(Inheritance):继承是一种使得一个类(称为子类)能够继承另一个类(称为父类)的属性和方法的机制。继承支持代码复用,使得子类继承父类的所有属性和方法,并且可以添加新的属性和方法或重写某些功能。例如,你可以创建一个名为 GoldenRetriever 的子类,它继承自父类 Dog,并添加专属于金毛寻回犬的特性或行为。

  • 多态性(Polymorphism):多态性允许不同类的对象响应相同的消息(或方法调用),但表现出不同的行为。这意味着同一个接口可以用于不同的底层形式(数据类型),提高了程序的灵活性和可扩展性。例如,在父类 Dog 中定义了一个方法叫做 speak()。如果在子类如 GoldenRetriever 中重写了这个方法,则当调用某个金毛寻回犬实例的 speak() 时会调用重写后的版本。

  • 抽象(Abstraction):抽象是隐藏复杂性,只展示必要功能的过程。在面向对象编程中,抽象通常通过使用抽象类和接口实现。抽象类不能被实例化,并且可能包含抽象方法(即没有具体实现的方法)。子类负责提供抽象方法的具体实现。这有助于减少程序复杂性,提高可维护性。例如,你可能会定义一个抽象类叫做 Animal,它声明了一个抽象方法 speak() 但没有提供具体实现。任何继承自 Animal 的子类都需要提供 speak() 方法的具体实现。

总之,面向对象编程的这些核心概念相互协作,为解决复杂问题提供了一个清晰、灵活的方法。通过类和对象,程序员可以模拟现实世界的实体和行为。封装、继承、多态性和抽象进一步提高了代码的重用性、安全性和易维护性

封装的一个代码示例如下所示:

封装的作用

  1. 信息隐藏:封装允许类隐藏其内部状态和实现细节,仅对外提供一个公共接口。通过这种方式,类的使用者不需要关心类如何实现功能,只需要知道如何通过公共接口与之交互。

  2. 模块化:通过将数据和操作这些数据的行为捆绑在一起,封装促进了更高级别的软件组织结构 —— 模块化。这使得开发者能够更容易地理解单个部分如何工作,并且在不影响其他部分的情况下修改或改进特定功能。

  3. 减少耦合:封装有助于减少系统中不同部分之间的依赖关系(耦合),因为每个部分都通过固定的接口暴露其功能,从而使得修改内部实现时不会影响到其他部分。

Python 中封装的例子。假设我们要设计一个简单的 BankAccount 类来表示银行账户。该类应该有两个私有属性:账户余额 _balance 和账户密码 _password,以及几个方法来对这些属性进行安全访问和修改。

class BankAccount:def __init__(self, initial_balance, password):self._balance = initial_balance    # 私有属性self._password = password          # 私有属性def deposit(self, amount):if amount > 0:self._balance += amountprint(f"存入金额: {amount}。当前余额: {self._balance}")else:print("存入金额必须大于0。")def withdraw(self, amount, password):if password == self._password:if 0 < amount <= self._balance:self._balance -= amountprint(f"取出金额: {amount}。当前余额: {self._balance}")else:print("取款金额无效或余额不足。")else:print("密码错误。")def get_balance(self, password):if password == self._password:return f"当前余额: {self._balance}"else:return "密码错误。"

在上面这个例子中:

  • _balance_password 是私有属性,它们被前缀 _ 标记(在 Python 中,虽然没有严格意义上的私有成员,但是按照约定使用下划线前缀表示它们是受保护的成员,不应该直接从类外部访问)。

  • deposit() 方法允许用户存钱到账户中。

  • withdraw() 方法允许用户从账户中取钱,但需要验证密码。

  • get_balance() 方法允许用户查询余额,但也需要密码验证。

通过这种方式,我们确保了对敏感信息(如余额和密码)的安全访问,并且隐藏了具体实现细节(比如如何存取钱和验证密码)。用户只能通过类提供的公共接口与银行账户交互,而无法直接访问或修改其内部状态(比如直接改变余额或密码),从而展示了封装在 Python OOP 中实现代码模块化和信息隐藏的能力。

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

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

相关文章

“数字大冒险:探索二分查找的神奇之旅“

前言 作者&#xff1a;小蜗牛向前冲 专栏&#xff1a;小蜗牛算法之路 专栏介绍&#xff1a;"蜗牛之道&#xff0c;攀登大厂高峰&#xff0c;让我们携手学习算法。在这个专栏中&#xff0c;将涵盖动态规划、贪心算法、回溯等高阶技巧&#xff0c;不定期为你奉上基础数据结构…

深入了解Linux: dbus-daemon系统总线的作用与管理

dbus-daemon是Linux和其他类Unix系统中的消息总线系统&#xff0c;它允许不同的程序&#xff08;通常是进程&#xff09;进行相互通信。dbus-daemon提供了两种类型的消息总线&#xff0c;一种是系统总线&#xff08;system bus&#xff09;&#xff0c;另一种是会话总线&#x…

算法:多重背包问题dp

文章目录 一、多重背包问题特点1.1、多重背包问题的特征1.2、解决多重背包问题的基本方法典型例题&#xff1a;AcWing——多重背包问题I 1.3、二进制优化1.3.1、二进制优化的思想1.3.2、多重背包问题的二进制优化 一、多重背包问题特点 多重背包问题是背包问题的又一变种&…

性能优化角度

1.启动角度 2.数据缓存角度比如历史信息联想 3.内存释放角度 4.配合并要求后端进行接口API整合 5.耗时较多需求&#xff0c;根据业务情况进行线程异步处理 6.通过开源的loop监控sdk日志埋点&#xff0c;可监控线程对应环路的休眠/唤醒时间间隔&#xff0c;优化卡顿 7.尽量避免离…

如何在Flutter应用中配置ipa Guard进行混淆

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

彩虹聚合DNS管理系统源码

聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析&#xff0c;目前已支持的域名平台有&#xff1a;阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户&#xff0c;每个用户可分配不同的域名解析权限&#xff1b;支持API接口&#xff0c;支持获取域名…

LeetCode-冗余连接(并查集)

每日一题&#xff0c;今天又刷到一道使用并查集来解决的问题&#xff0c;再次加深了一遍自己对并查集的印象和使用。 题目要求 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1…

对象参数验证工具, 解决非controller层数据校验问题, @Validated、@Valid

工具类 package com.common;import com.common.SysException;import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.Set; import java.util.stream.Collectors;/**1. author: 0i773. Desc…

Android TV 谷歌语音

Android TV 上的谷歌语音助手是一个强大的工具&#xff0c;它允许用户通过语音命令来控制电视设备、搜索内容、管理智能家居设备等。下面是一些关于在 Android TV 上使用谷歌语音助手的实战建议&#xff1a; 启用和设置&#xff1a; 确保你的 Android TV 设备已经连接到了互联…

【计算机毕业设计】超市进销存管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

揭秘ChatGPT技巧:高效撰写学术论文的专家秘笈

ChatGPT无限次数:点击直达 html 揭秘ChatGPT技巧&#xff1a;高效撰写学术论文的专家秘笈 揭秘ChatGPT技巧&#xff1a;高效撰写学术论文的专家秘籍 在当今信息爆炸的时代&#xff0c;如何高效撰写学术论文成为许多研究者和学生关注的焦点。ChatGPT是一款人工智能助手&…

PostgreSQL入门到实战-第八弹

PostgreSQL入门到实战 PostgreSQL数据过滤(一)官网地址PostgreSQL概述PostgreSQL的where子命令介绍PostgreSQL的where子命令实操更新计划 PostgreSQL数据过滤(一) 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://ww…

数据结构---顺序表实现

目录 1.顺序表 2.动态顺序表的实现 &#xff08;4&#xff09;顺序表初始化 &#xff08;5&#xff09;顺序表销毁 &#xff08;6&#xff09;顺序表的插入 a.尾插 b.头插 &#xff08;7&#xff09;顺序表的删除 a.尾删 b.头删 &#xff08;8&#xff09;指定位置之…

程序员编程电脑的配置一般需要满足什么样的要求?

处理器&#xff08;CPU&#xff09;&#xff1a;推荐选择Intel Core i5或AMD Ryzen 5及以上的处理器&#xff0c;适用于一般编程任务。对于更复杂的任务如大型项目编译或虚拟化技术&#xff0c;建议选择Intel Core i7或AMD Ryzen 7等更高端处理器。 内存&#xff08;RAM&#…

大话设计模式之桥接模式

桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与它的实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过提供一个桥接接口来实现这种分离&#xff0c;使得抽象部分和实现部分可以在运行时独立地进行修改。 桥接模式主要由两个部分组成&#xff1a;抽象部分…

Chat Ollama docker部署及运行 本地大语言模型+本地知识库搭建 强烈推荐

背景介绍 Ollama 是目前最流行的大模型本地化工具之一。 Ollama 支持一系列开源大模型&#xff0c;包括主流的聊天模型和文本嵌入模型&#xff08;Embedding Models&#xff09;等。 ChatOllama 是基于 Ollama 的 Web 应用&#xff0c;它可以让用户直接在浏览器中使用 Ollama。…

解锁电气数据新价值:SolidWorks Electrical助力企业转型

在信息化、数字化的时代&#xff0c;电气数据库已成为企业不可或缺的核心资产。它以其独特的功能和优势&#xff0c;助力企业在激烈的市场竞争中脱颖而出&#xff0c;实现数字化转型的跨越式发展。 SolidWorks Electrical电气数据库具备强大的数据整合能力。它能够将企业内部各…

C语言生成大模型代码

C语言生成大模型代码 在C语言中生成大模型代码并不是一个常见的任务&#xff0c;因为C语言通常用于编写系统级或应用级的程序&#xff0c;而不是用于机器学习或深度学习模型的开发。大模型代码通常指的是深度学习框架&#xff08;如TensorFlow、PyTorch等&#xff09;中用于训…

算法之图算法

1、广度优先搜索&#xff1a; package com.arithmetic.graph; import java.util.LinkedList; import java.util.Queue; //定义一个邻接矩阵用于表示图的结构&#xff0c;0表示两个节点之间没有边&#xff0c;1表示有边连接。 //然后使用一个布尔数组visited来标记节点是否被访…

keep-alive包裹的两个页面使用了echart,在resize后切换,echart会出现空白现象,需要再resize才会出现

问题&#xff1a;页面有2个echarts图&#xff0c;一打开页面图表是有的&#xff0c;然后切换到另一个页面&#xff0c;也是有2个echarts图&#xff0c;然后缩放浏览器窗口&#xff0c;再切换回第一次打开的页面&#xff0c;图表不显示。 因为keep-live保存了当前页面的属性&am…