当前位置: 首页 > news >正文

Python 面向对象编程入门:从思想到属性操作

目录

一、从 “步骤” 到 “实体”:面向对象编程思想的诞生

1. 面向过程:按 “步骤” 拆解问题

2. 面向对象:以 “实体” 为中心组织逻辑

3. 两种思想的对比

二、类与对象:面向对象的核心概念

1. 对象:现实实体的代码映射

2. 类:对象的 “模板”

3. 类的定义与实例化

4. self 关键字:对象的 “身份证”

三、对象的属性:添加与获取的两种方式

1. 类外添加与获取属性

2. 类内获取外部定义的属性

3. 为什么需要__init__方法?

总结:从思想到实践的第一步


在编程世界里,解决问题的思路往往决定了代码的效率与可维护性。面向对象编程(OOP)作为一种贴近现实世界的思维方式,已成为开发复杂系统的核心思想。本文将从编程思想对比出发,带你走进 Python 面向对象的世界,掌握类、对象、属性等核心概念,为后续深入学习打下基础。

一、从 “步骤” 到 “实体”:面向对象编程思想的诞生

编程的本质是解决问题,但不同的思维方式会导致截然不同的代码结构。在面向对象出现之前,“面向过程” 是主流思路,而面向对象的出现,则让代码更贴近现实逻辑。

1. 面向过程:按 “步骤” 拆解问题

面向过程的核心思想可以概括为 “自顶向下,逐步细化”:将一个功能拆解为一系列连续的步骤,每个步骤用函数实现,最终按顺序执行所有步骤完成任务。

举个例子,新学生入学报名的过程,用面向过程的思路会拆解为:

  1. 学生提出报名,提供材料;
  2. 学生缴纳学费,获得凭证;
  3. 教师凭凭证分配班级;
  4. 班级添加学生信息。

每个步骤对应一个函数,依次调用即可完成整个流程。这种方式直观简单,但当系统复杂到一定程度(比如增加退费、转班等功能),步骤间的耦合会越来越强,修改一处可能引发连锁反应。

2. 面向对象:以 “实体” 为中心组织逻辑

现实世界中,任何动作都有 “执行者”(实体)。面向对象的核心就是围绕这些实体(对象)及其功能来组织代码,让计算机模拟现实逻辑时更自然。

还是以报名系统为例,用面向对象的思路分析:

(1)动作的执行者(实体)有:学生、学校、教师、班级;

(2)每个实体有自己的属性(如学生的姓名、年龄)和功能(如学生缴费、教师分配班级);

  (3)最终通过实体间的交互完成整个流程。

这种方式将 “谁来做” 和 “做什么” 分离,让代码结构更清晰,尤其适合大型复杂系统。

3. 两种思想的对比

维度面向过程面向对象
核心步骤与函数实体(对象)与方法
模块化函数级模块化类级模块化(封装性更强)
适用场景简单脚本、步骤固定的功能大型系统、需求多变的场景
执行效率较高(函数调用开销小)略低(对象实例化有额外开销)
维护与扩展复杂(步骤耦合度高)简单(实体独立,修改影响小)

二、类与对象:面向对象的核心概念

理解了思想,接下来需要掌握面向对象的 “语法工具”—— 类与对象。

1. 对象:现实实体的代码映射

对象是面向对象编程的基本单元,对应现实世界中的一个具体实体。它由两部分组成:

(1)属性:实体的特征(如人的姓名、年龄,车的品牌、颜色);

(2)方法:实体的功能(如人会吃饭、车能行驶)。

例如,“学生” 对象可以有name(姓名)、age(年龄)等属性,以及study()(学习)、pay_fee()(缴费)等方法。

2. 类:对象的 “模板”

现实中,同一类实体(如所有学生)有相似的属性和方法。类就是对这些相似实体的抽象,规定了对象应该有哪些属性和方法。

简单说:类是模板,对象是模板实例化的产物。比如 “学生类” 规定了所有学生都有姓名和年龄,能学习和缴费;而 “张三”“李四” 就是学生类实例化出的具体对象。

3. 类的定义与实例化

在 Python 中,定义类的语法如下(Python3 推荐使用新式类,继承自object):

# 定义一个学生类(新式类)
class Student(object):# 属性(可以在实例化后添加,也可通过魔术方法初始化)# 方法(函数)def study(self):print(f"{self.name}正在学习")  # self的作用见下文def pay_fee(self):print(f"{self.name}缴纳了学费")

类定义后,通过类名()即可实例化对象(无需new关键字):

# 实例化两个学生对象
stu1 = Student()
stu2 = Student()# 为对象添加属性(类外添加方式,下文会详解)
stu1.name = "张三"
stu2.name = "李四"# 调用对象的方法
stu1.study()  # 输出:张三正在学习
stu2.pay_fee()  # 输出:李四缴纳了学费

4. self 关键字:对象的 “身份证”

在类的方法中,第一个参数必须是self(名称约定为 self,不可省略),它指向当前实例化的对象本身。

例如,当调用stu1.study()时,self就代表stu1;调用stu2.study()时,self就代表stu2。通过self,方法可以访问当前对象的属性和其他方法。

三、对象的属性:添加与获取的两种方式

属性是对象的 “数据”,在 Python 中,属性可以在类外或类内添加和获取,灵活且方便。

1. 类外添加与获取属性

最直接的方式是在实例化对象后,通过对象.属性名添加和获取:

# 定义一个空类
class Person(object):pass# 实例化对象
p = Person()# 类外添加属性
p.name = "王五"  # 添加姓名属性
p.age = 20       # 添加年龄属性# 类外获取属性
print(p.name)  # 输出:王五
print(p.age)   # 输出:20

这种方式简单直观,但每次实例化都要手动添加属性,不够高效(后续会通过__init__方法解决)。

2. 类内获取外部定义的属性

如果属性在类外添加,类内的方法可以通过self.属性名访问:

class Person(object):def introduce(self):# 访问类外添加的name和age属性print(f"我叫{self.name},今年{self.age}岁")p = Person()
p.name = "赵六"
p.age = 25
p.introduce()  # 输出:我叫赵六,今年25岁

3. 为什么需要__init__方法?

当对象需要多个属性时,手动添加不仅繁琐,还可能遗漏。__init__方法(初始化方法)可以在实例化对象时自动初始化属性,解决这一问题。

例如:

class Person(object):# 初始化方法:实例化时自动调用def __init__(self, name, age):self.name = name  # 初始化name属性self.age = age    # 初始化age属性def introduce(self):print(f"我叫{self.name},今年{self.age}岁")# 实例化时直接传入属性值
p = Person("孙七", 30)
p.introduce()  # 输出:我叫孙七,今年30岁

__init__是面向对象中重要的 “魔术方法”,后续会详细讲解。

总结:从思想到实践的第一步

面向对象编程的核心是 “以实体为中心”,通过类与对象的封装,让代码更贴近现实逻辑。本文介绍了:

(1)面向对象与面向过程的思想差异;

(2)类(模板)与对象(实例)的关系;

(3)属性的添加与获取方式。

http://www.dtcms.com/a/343235.html

相关文章:

  • PyTorch 环境配置
  • Telnet、ftp详解
  • 教育场景下禁用html5播放器拖动进度条的例子
  • python 项目编号 2025821 有关于中英文数据的收集、处理
  • mac的m3芯片通过Homebrew安装git
  • ES_分词
  • 2025-08-21 Python进阶9——__main__与lambda
  • Harbor私有仓库实战配置
  • FLUX-Text模型完全配置指南:从环境搭建到故障排除
  • 用例完备性1:用例模板
  • 数据结构-HashMap
  • Kubernetes“城市规划”指南:告别资源拥堵与预算超支,打造高效云原生都市
  • Typora 快速使用入门:15分钟掌握高效写作
  • 锅炉铸造件三维扫描尺寸及形位公差检测技术方案-中科米堆CASAIM
  • ⸢ 啟 ⸥ ⤳ 为什么要开这个专栏?
  • Ubuntu Server 系统安装 Docker
  • uni-app:实现文本框的自动换行
  • SpringBoot + Vue实现批量导入导出功能的标准方案
  • k8sday13数据存储(1.5/2)
  • 基于Matlab多技术融合的红外图像增强方法研究
  • C++---滑动窗口平滑数据
  • 瑞派亚宠展专访 | 以数智化重塑就医体验,共筑宠物健康新生态
  • 区块链存证操作
  • echarts关系图(Vue3)节点背景图连线设置
  • 2025.7.19卡码刷题-回溯算法-组合
  • IOS购买订阅通知信息解析说明Java
  • 设计模式3-模板方法模式
  • 爬虫基础学习-项目实践:每次请求,跟换不同的user-agent
  • 茶饮业内卷破局,从人力管理入手
  • iOS 手势与控件事件冲突解决清单