在 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() 方法的具体实现。
总之,面向对象编程的这些核心概念相互协作,为解决复杂问题提供了一个清晰、灵活的方法。通过类和对象,程序员可以模拟现实世界的实体和行为。封装、继承、多态性和抽象进一步提高了代码的重用性、安全性和易维护性。
封装的一个代码示例如下所示:
封装的作用
-
信息隐藏:封装允许类隐藏其内部状态和实现细节,仅对外提供一个公共接口。通过这种方式,类的使用者不需要关心类如何实现功能,只需要知道如何通过公共接口与之交互。
-
模块化:通过将数据和操作这些数据的行为捆绑在一起,封装促进了更高级别的软件组织结构 —— 模块化。这使得开发者能够更容易地理解单个部分如何工作,并且在不影响其他部分的情况下修改或改进特定功能。
-
减少耦合:封装有助于减少系统中不同部分之间的依赖关系(耦合),因为每个部分都通过固定的接口暴露其功能,从而使得修改内部实现时不会影响到其他部分。
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 中实现代码模块化和信息隐藏的能力。
相关文章:
在 Python 编程中,面向对象编程的核心概念包括哪些部分?
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 在 Python 编程中,面向对象编程(Object-Oriented Programming,OOP)的核心概念主要包括类(Class)、对象(Object&#x…...

elementui树形组件自定义高亮颜色
1、需求描述:点击按钮切换树形的章节,同时高亮 2、代码实现 1)style样式添加 <style> .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {background-color: #81d3f8 !important; //高亮颜色colo…...
富格林:技巧抵抗曝光虚假套路
富格林悉知,黄金具备独特的优势吸引着众多投资者的目光,在现货黄金市场也被认为是一条潜力无限的盈利之道。但我们要明白风险与盈利是相辅相成的,因此在这复杂的市场中我们必须利用技巧来抵抗曝光的虚假套路。下面富格林将给大家分享一些正确…...

24年权威数学建模报名通知汇总(含妈妈杯、国赛、美赛、电工杯、数维杯、五一数模、深圳杯......)
1、MathorCup比赛 报名时间:2024年4月11日中午12点(周四) 比赛开始时间:2024年4月12日上午8时(周五) 比赛结束时间:2024年4月16日上午9时(周二) 报名费用:…...

【C语言自定义类型之----结构体,联合体和枚举】
一.结构体 1.结构体类型的声明 srruct tag {nemer-list;//成员列表 }varible-list;//变量列表结构体在声明的时候,可以不完全声明。 例如:描述一个学生 struct stu {char name[20];//名字int age;//年龄char sex[20];//性别 };//分号不能省略2.结构体…...

[Java基础揉碎]StringBuffer类 StringBuild类
目录 StringBuffer类 介绍 继承图 String VS StringBuffer StringBuffer的构造器 String和StringBuffer的转换 StringBuffer类常见方法 测试题 StringBuild类 基本介绍 继承图 String、StringBuffer 和StringBuilder的比较 通过字符串拼接循环测试可以看到各自的性…...

Android Studio修改项目包名
1.第一步,项目结构是这样的,3个包名合在了一起,我们需要把每个包名单独展示出来 2.我们点击这个 取消选中后的包名结构是这样的,可以看到,包名的每个文件夹已经展示分开了,现在我们可以单独对每个包名文件夹…...
c++语言增强的地方
目录 1.对全局变量的检测能力 2.struct类型增强 3.c中所有变量和函数都必须有类型 4.c中新增的bool类型 5.三目运算符的加强 6.const的增强 7.对枚举的增强 1.对全局变量的检测能力 C语言中同时定义两个相同的全局变量编译器并不会报错,而c中就会报重定义错…...

评论发布完整篇(react版)
此篇文章阐述评论的最新、最热之间的tab标签切换(包括当前所在tab标签的高亮显示问题);当前评论的删除;除此之外还延伸了用户的评论实时发布功能。其中最新tab标签所展示的内容是根据当前评论点赞数来进行排序,点赞数量…...

前端window.open的简单使用
JavaScript 中的 Window.open() 用法详解-CSDN博客 window.open("https://www.baidu.com/?tn49055317_12_hao_pg", _blank);...
基于开源软件构建存储解决方案的思考
近来看了一些IBM的存储产品的资料,有一些收获。 依据存储软件和搭配硬件,IBM存储产品的组合,大致分类如下: 自研存储软件,搭配自研专有硬件自研存储软件,搭配通用服务器硬件,比如IBM Storage S…...

【leetcode】动态规划::前缀和(二)
标题:【leetcode】前缀和(二) 水墨不写bug 正文开始: (一) 和为K的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续…...

SpringBoot自动装配原理之@Import注解解析
文章目录 1. 概述2. 使用2.1 导入普通Bean2.2 导入配置类2.3 导入 ImportSelector 实现类2.4 导入 ImportBeanDefinitionRegistrar 实现类 3. 区别 1. 概述 当谈及现代Java开发领域中的框架选择时,SpringBoot无疑是无与伦比的热门之选。其简化了开发流程࿰…...

49 样式迁移【李沐动手学深度学习v2课程笔记】
1. 样式迁移(Style Transfer) 计算机视觉的应用之一,将样式图片中的样式(比如油画风格等)迁移到内容图片(比如实拍的图片)上,得到合成图片 可以理解成为一个滤镜,但相对于滤镜来讲…...

Linux的学习之路:4、权限
一、Linux权限的概念 权限我们都熟悉,最常见的就是在看电视时需要vip这个就是权限,然后在Linux就是有两个权限,就是管理员也就是超级用户和普通的用户 命令:su [用户名] 功能:切换用户。 例如,要从root用户…...

自定义类型—结构体
目录 1 . 结构体类型的声明 1.1 结构的声明 1.2 结构体变量的创建与初始化 1.3 结构体的特殊声明 1.4 结构体的自引用 2. 结构体内存对齐 2.1 对齐规则 2.2 为什么存在内存对齐 2.3 修改默认对齐数 3. 结构体传参 4.结构体实现位段 4.1 位段的内存分配 4.3 位段的…...

【JavaWeb】Jsp基本教程
目录 JSP概述作用一个简单的案例:使用JSP页面输出当前日期 JSP处理过程JSP 生命周期编译阶段初始化阶段执行阶段销毁阶段案例 JSP页面的元素JSP指令JSP中的page指令Include指令示例 taglib指令 JSP中的小脚本与表达式JSP中的声明JSP中的注释HTML的注释JSP注释 JSP行…...

外包干了25天,技术退步明显.......
先说一下自己的情况,大专生,18年通过校招进入杭州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…...
C++(14): STL条件变量std::condition_variable
1. 简述 在C的标准模板库(STL)中,std::condition_variable是一个非常重要的同步原语,用于在多线程编程中实现线程间的条件同步。它允许一个或多个线程等待某个条件成立,当条件成立时,等待的线程会被唤醒并继…...

Harmony与Android项目结构对比
主要文件对应 Android文件HarmonyOS文件清单文件AndroidManifest.xmlmodule.json5Activity/Fragmententryability下的ts文件XML布局pages下的ets文件resresourcesModule下的build.gradleModule下的build-profile.json5gradlehvigor根目录下的build.gradle根目录下的build-profi…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...