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

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.xdnf.cn/news/18428.html

相关文章:

  • 图(Graph):关系网络的数学抽象
  • 3维模型导入到3Dmax中的修改色彩简单用法----第二讲
  • 零成本加速:EdgeOne免费套餐3分钟接入指南
  • MYSQL库及表的操作
  • 奈飞工厂:算法优化实战 —— 从推荐系统到内容分发
  • Python工程师向项目管理转型的深度分析与学习道路规划
  • 《用餐》,午餐食堂即景小诗分享(手机/小视频/光盘/养生)
  • AI + 云原生 + ITSM 的三重融合:企业数字化转型的新引擎
  • 面试准备革命:面试汪 vs 传统方法,谁更胜一筹?
  • 搭建我的世界mc服务器全流程——阿里云游戏攻略
  • 相似图像处理程序
  • 北京-15k测试-入职甲方金融-上班第二天
  • 哈尔滨云前沿服务器租用类型
  • 高效获取应用程序图标的方法
  • CSS 3D动画,围绕旋转动画Demo
  • 面试可能问到的问题思考-Redis
  • 机器学习7
  • 网络与信息安全有哪些岗位:(5)安全开发工程师
  • Ubuntu22.04配置网络上网
  • Ubuntu Server 安装 gvm 管理 Go 语言开发环境
  • 自然语言处理NLP L4: 高级语言模型——四种泛化平滑方式
  • 【TrOCR】用Transformer和torch库实现TrOCR模型
  • Matplotlib+HTML+JS:打造可交互的动态数据仪表盘
  • 智慧工厂的 “隐形大脑”:边缘计算网关凭什么重构设备连接新逻辑?
  • 详细说明http协议特别是conten-length和chunk编码,并且用linux的命令行演示整个过程
  • Go语言变量声明与初始化详解
  • 一个状态机如何启动/停止另一个状态机
  • 【机器学习 / 深度学习】基础教程
  • StarRocks不能启动 ,StarRocksFe节点不能启动问题 处理
  • 生信分析自学攻略 | R语言函数与参数介绍