Python---面向对象编程思想迁移

一、核心认知:面向过程 vs 面向对象

先明确两种编程思想的本质差异,才能理解 “迁移” 的核心逻辑:

维度面向过程(Procedure-Oriented)面向对象(Object-Oriented)
核心单元函数 / 步骤(按 “做什么” 拆分)对象(按 “谁来做” 拆分)
组织方式线性的步骤序列(先做 A→再做 B→再做 C)对象间的交互(对象 A 调用方法→通知对象 B 执行动作)
数据与逻辑的关系数据和函数分离(函数操作外部数据)数据和逻辑封装在对象内(对象自己管理数据)
适用场景简单、一次性、无复用的小程序复杂、需复用、易拓展的大型程序
典型例子写一个脚本计算单个商品的折扣价开发电商系统(商品、用户、订单等对象交互)

二、思维迁移的核心步骤

从面向过程迁移到面向对象,本质是从 “关注步骤” 转向 “关注事物(对象)”,可遵循以下 4 个步骤:

步骤 1:识别场景中的 “对象”(抽象事物)

先从业务场景中提取核心 “事物”,每个事物就是一个潜在的类:

  • 比如 “电商下单” 场景:核心事物有「用户」「商品」「订单」;
  • 比如 “学生成绩管理” 场景:核心事物有「学生」「课程」「成绩」。
步骤 2:定义对象的 “属性”(特征)和 “方法”(行为)
  • 属性:描述对象的静态特征(如用户的姓名 / 手机号,商品的名称 / 价格);
  • 方法:描述对象的动态行为(如用户下单、商品计算折扣、订单生成)。
步骤 3:封装对象的逻辑(数据 + 方法绑定)

将对象的属性和方法封装到类中,隐藏内部细节,仅通过公开方法交互。

步骤 4:设计对象间的交互(替代线性步骤)

用对象的方法调用,替代面向过程的 “步骤序列”,实现业务逻辑。

三、实战迁移示例:从面向过程改造成面向对象

以 “商品折扣计算 + 订单生成” 为例,对比两种写法,理解迁移过程。

1. 面向过程写法(关注步骤)

python

# 面向过程:按步骤拆分,数据和函数分离 def calculate_discount(price, discount_rate): """步骤1:计算商品折扣价""" if discount_rate < 0 or discount_rate > 1: raise ValueError("折扣率必须在0-1之间") return price * discount_rate def generate_order(user_name, goods_name, original_price, discount_rate): """步骤2:生成订单""" discount_price = calculate_discount(original_price, discount_rate) order_info = { "user": user_name, "goods": goods_name, "original_price": original_price, "discount_price": discount_price, "order_time": "2026-01-08" } print(f"订单生成成功:{order_info}") return order_info # 执行步骤(线性调用) if __name__ == "__main__": # 数据是零散的,函数操作外部数据 user_name = "张三" goods_name = "Python编程书" price = 89.9 discount = 0.8 generate_order(user_name, goods_name, price, discount)
2. 面向对象改造(关注对象)

按照 “识别对象→定义属性 / 方法→封装→交互” 的步骤改造:

python

# 步骤1+2:识别对象,定义属性和方法 class Goods: """商品对象:封装商品的属性和折扣计算逻辑""" def __init__(self, name, original_price): # 封装属性:商品名称、原价 self.name = name self.original_price = original_price # 封装方法:商品自己计算折扣价(逻辑内聚) def get_discount_price(self, discount_rate): if discount_rate < 0 or discount_rate > 1: raise ValueError("折扣率必须在0-1之间") return self.original_price * discount_rate class User: """用户对象:封装用户属性""" def __init__(self, name): self.name = name class Order: """订单对象:封装订单生成逻辑""" def __init__(self, user, goods): # 封装属性:关联用户和商品对象(对象间交互) self.user = user self.goods = goods self.order_time = "2026-01-08" # 封装方法:生成订单(调用商品对象的方法) def generate(self, discount_rate): discount_price = self.goods.get_discount_price(discount_rate) order_info = { "user": self.user.name, "goods": self.goods.name, "original_price": self.goods.original_price, "discount_price": discount_price, "order_time": self.order_time } print(f"订单生成成功:{order_info}") return order_info # 步骤4:对象间交互(替代线性步骤) if __name__ == "__main__": # 创建对象(实例化) user = User("张三") goods = Goods("Python编程书", 89.9) order = Order(user, goods) # 调用对象方法完成业务(对象交互) order.generate(0.8)
3. 迁移对比分析
改造点面向过程面向对象
数据管理零散的变量(user_name、price 等)封装在对象中(user.name、goods.original_price)
逻辑归属函数独立于数据(calculate_discount 操作外部 price)逻辑内聚于对象(goods 自己计算折扣)
拓展性新增 “会员折扣” 需修改 generate_order新增 “会员折扣” 只需给 User 加属性 / 方法,Order 调用即可
复用性函数复用需传多个参数对象可直接复用(如多个订单用同一个商品对象)

四、迁移过程中的关键思维转变

1. 从 “写步骤” 到 “定义事物”
  • 面向过程:先想 “第一步做什么,第二步做什么”;
  • 面向对象:先想 “这个场景有哪些核心事物,每个事物有什么特征和行为”。
2. 从 “数据和逻辑分离” 到 “封装”
  • 面向过程:函数接收外部数据,修改外部数据;
  • 面向对象:对象自己管理数据,逻辑(方法)只操作自己的属性,外部仅通过方法交互。
3. 从 “硬编码依赖” 到 “对象交互”
  • 面向过程:函数直接依赖具体的参数(如 generate_order 依赖 user_name 字符串);
  • 面向对象:对象依赖抽象的 “类”(Order 依赖 User 类和 Goods 类),拓展时只需新增类 / 方法,无需修改原有逻辑。
4. 从 “重复代码” 到 “继承 / 多态”(进阶)

当多个对象有相似特征 / 行为时,用继承复用代码;用多态实现 “同一行为不同表现”:

python

# 进阶:继承实现代码复用 class MemberUser(User): """会员用户(继承普通用户)""" def __init__(self, name, member_level): super().__init__(name) self.member_level = member_level # 多态:不同会员等级有不同折扣 def get_member_discount(self): if self.member_level == 1: return 0.9 elif self.member_level == 2: return 0.8 else: return 0.7 # 新增会员逻辑,原有Order类无需修改 if __name__ == "__main__": member = MemberUser("李四", 2) goods = Goods("Python编程书", 89.9) order = Order(member, goods) order.generate(member.get_member_discount()) # 直接复用原有生成逻辑

五、迁移的落地建议(新手友好)

  1. 从小案例开始:先改造简单脚本(如计算器、待办清单),再尝试复杂场景;
  2. 先识别对象:拿一张纸列出场景中的 “事物”,标注每个事物的 “特征” 和 “行为”;
  3. 逐步封装:先把数据封装到类中,再把操作数据的函数改造成对象的方法;
  4. 避免过度设计:新手无需一开始就考虑继承 / 多态,先实现 “类 + 对象 + 封装”,再逐步优化。

总结

  1. 面向对象思维迁移的核心是从 “关注步骤” 转向 “关注对象”,先识别场景中的核心事物,再封装其属性和行为;
  2. 改造代码的关键是将 “零散数据 + 独立函数” 重构为 “对象(类)+ 封装方法”,让逻辑内聚于数据;
  3. 面向对象的优势体现在拓展性和复用性,新增功能时只需新增 / 修改对象,而非重构整个步骤序列。

这种思维转变不是一蹴而就的,通过多写、多对比面向过程和面向对象的代码,逐步就能形成 “用对象思考问题” 的习惯。

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

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

相关文章

为什么选Z-Image-Turbo?三大核心优势全面解析

为什么选Z-Image-Turbo&#xff1f;三大核心优势全面解析 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 在AI图像生成领域&#xff0c;速度、质量与易用性始终是开发者和创作者最关注的三大维度。阿里通义推出的 Z-Image-Turbo 模型&#xff0c;基于Diff…

K8s 集群部署基础:Linux 三节点 SSH 互信(免密登录)配置指南

文档说明 在 Kubernetes&#xff08;K8s&#xff09;集群部署与日常运维过程中&#xff08;如 kubeadm、Ansible、脚本化部署、批量运维等&#xff09;&#xff0c;控制节点与工作节点之间必须具备稳定的 SSH 互信能力。 本文档以 三台 Linux 节点 为示例&#xff0c;说明如何配…

算法题 子数组的最小值之和

907. 子数组的最小值之和 问题描述 给定一个整数数组 arr&#xff0c;计算所有非空连续子数组的最小值之和。由于答案可能很大&#xff0c;返回结果对 10^9 7 取模。 示例&#xff1a; 输入: arr [3,1,2,4] 输出: 17 解释: 子数组为 [3], [1], [2], [4], [3,1], [1,2], [2,4…

网络安全知识图谱硬核梳理:从基础到原理,从入门到实战的完整体系

随着互联网的普及和数字化进程的加速&#xff0c;网络安全已经成为我们生活中不可或缺的一部分。然而&#xff0c;很多人对于网络安全的概念仍然模糊不清。 那么&#xff0c;什么是网络安全&#xff1f;它究竟有多重要呢&#xff1f; 一、网络安全的定义 网络安全是指通过采取…

疑问解答:M2FP是否支持视频流实时解析?答案是肯定

疑问解答&#xff1a;M2FP是否支持视频流实时解析&#xff1f;答案是肯定 &#x1f9e9; M2FP 多人人体解析服务 (WebUI API) 项目背景与核心价值 在计算机视觉领域&#xff0c;人体解析&#xff08;Human Parsing&#xff09; 是一项比通用语义分割更精细的任务&#xff0…

M2FP更新日志:新增自动颜色映射,提升可视化体验

M2FP更新日志&#xff1a;新增自动颜色映射&#xff0c;提升可视化体验 &#x1f4d6; 项目简介&#xff1a;M2FP 多人人体解析服务 在计算机视觉领域&#xff0c;人体解析&#xff08;Human Parsing&#xff09; 是一项关键的细粒度语义分割任务&#xff0c;旨在将人体分解为多…

Python---面向对象的基本概念

一、面向对象的核心思想面向对象编程的核心是以 “对象” 为中心组织代码&#xff0c;把现实世界中的事物抽象为程序中的 “对象”&#xff0c;每个对象包含&#xff1a;属性&#xff1a;描述事物的特征&#xff08;如人的姓名、年龄&#xff0c;手机的品牌、价格&#xff09;&…

空间选择性ALE的两种工艺路径

空间选择性ALE的两种工艺路径 之前&#xff0c;我们聊过什么是ALE&#xff0c;详见文章&#xff1a;什么是原子层刻蚀&#xff08;ALE&#xff09;&#xff1f; 什么是空间选择性ALE&#xff1f; 空间选择性 ALE&#xff08;Spatially selective ALE&#xff09;&#xff0c…

空间选择性ALE的两种工艺路径

空间选择性ALE的两种工艺路径 之前&#xff0c;我们聊过什么是ALE&#xff0c;详见文章&#xff1a;什么是原子层刻蚀&#xff08;ALE&#xff09;&#xff1f; 什么是空间选择性ALE&#xff1f; 空间选择性 ALE&#xff08;Spatially selective ALE&#xff09;&#xff0c…

Z-Image-Turbo皮影戏风格图像生成实验

Z-Image-Turbo皮影戏风格图像生成实验 引言&#xff1a;当AI遇见传统艺术——皮影戏风格的探索之旅 在AI图像生成技术飞速发展的今天&#xff0c;我们不再满足于简单的“高清照片”或“动漫风格”&#xff0c;而是开始尝试将传统文化元素与现代生成模型深度融合。阿里通义推出的…

真实案例:某服装品牌用M2FP构建虚拟换装系统降本60%

真实案例&#xff1a;某服装品牌用M2FP构建虚拟换装系统降本60% 在数字化营销与个性化体验日益重要的今天&#xff0c;虚拟试衣已成为服装零售行业提升转化率、降低退货成本的关键技术。然而&#xff0c;传统方案依赖高精度3D建模和GPU集群推理&#xff0c;部署成本高昂&#x…

金电镀凸块的应用

金电镀凸块的应用什么是金凸块&#xff1f;金凸块&#xff08;Gold Bump / Au Bump&#xff09;是做在芯片焊盘&#xff08;Pad&#xff09;上的一类微型“凸起金属端子”&#xff0c;材料以金&#xff08;Au&#xff09;为主&#xff0c;用来把芯片与外部基板/玻璃/柔性板实现…

金电镀凸块的应用

金电镀凸块的应用什么是金凸块&#xff1f;金凸块&#xff08;Gold Bump / Au Bump&#xff09;是做在芯片焊盘&#xff08;Pad&#xff09;上的一类微型“凸起金属端子”&#xff0c;材料以金&#xff08;Au&#xff09;为主&#xff0c;用来把芯片与外部基板/玻璃/柔性板实现…

模型融合技巧:结合M2FP与其他CV模型

模型融合技巧&#xff1a;结合M2FP与其他CV模型 &#x1f4d6; 项目背景与技术痛点 在计算机视觉领域&#xff0c;人体解析&#xff08;Human Parsing&#xff09; 是一项基础但极具挑战的任务。它要求对图像中的人体进行像素级语义分割&#xff0c;精确识别出如头发、面部、上…

Z-Image-Turbo故障艺术(Glitch Art)特效实现

Z-Image-Turbo故障艺术&#xff08;Glitch Art&#xff09;特效实现 引言&#xff1a;从AI图像生成到数字美学实验 在当代数字艺术创作中&#xff0c;故障艺术&#xff08;Glitch Art&#xff09; 作为一种反常规、反完美的视觉表达形式&#xff0c;正逐渐被艺术家和开发者所…

M2FP色彩映射表:各身体部位对应颜色编码说明

M2FP色彩映射表&#xff1a;各身体部位对应颜色编码说明 &#x1f9e9; M2FP 多人人体解析服务 在计算机视觉领域&#xff0c;人体解析&#xff08;Human Parsing&#xff09; 是一项关键的细粒度语义分割任务&#xff0c;旨在将人体图像划分为多个具有明确语义的身体部位区域。…

无需CUDA也能做人像分割?M2FP CPU镜像填补无卡用户空白

无需CUDA也能做人像分割&#xff1f;M2FP CPU镜像填补无卡用户空白 &#x1f4d6; 项目简介&#xff1a;M2FP 多人人体解析服务 在当前AI视觉应用日益普及的背景下&#xff0c;人像语义分割已成为图像编辑、虚拟试衣、智能安防等场景的核心技术之一。然而&#xff0c;大多数高性…

性能提升300%:M2FP模型推理优化全记录

性能提升300%&#xff1a;M2FP模型推理优化全记录 &#x1f4cc; 背景与挑战&#xff1a;多人人体解析的工程落地难题 在智能视觉应用中&#xff0c;人体解析&#xff08;Human Parsing&#xff09; 是一项关键基础能力&#xff0c;广泛应用于虚拟试衣、动作识别、人像美化和安…

晶圆电镀的阳极钝化是什么?

晶圆电镀的阳极钝化是什么&#xff1f; 这个是可溶性阳极的常见问题&#xff0c;关于什么是可溶性阳极&#xff0c;可以参考之前文章&#xff1a;电镀机的阳极是什么材质&#xff1f; 用一句通俗的话来概括阳极钝化就是原本应该顺畅溶解、补充金属离子的阳极&#xff0c;因为…

晶圆电镀的阳极钝化是什么?

晶圆电镀的阳极钝化是什么&#xff1f; 这个是可溶性阳极的常见问题&#xff0c;关于什么是可溶性阳极&#xff0c;可以参考之前文章&#xff1a;电镀机的阳极是什么材质&#xff1f; 用一句通俗的话来概括阳极钝化就是原本应该顺畅溶解、补充金属离子的阳极&#xff0c;因为…