news 2026/8/23 6:56:14

【Python 入门】面向对象基础:类、对象、成员变量与构造方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Python 入门】面向对象基础:类、对象、成员变量与构造方法

文章目录

  • 前言
  • 一、面向对象思想入门
  • 二、类的定义:成员变量与成员方法
    • 2.1 基础语法
    • 2.2 self 关键字详解
    • 2.3 完整示例:学生类
  • 三、类与对象的示例:闹钟类
  • 四、构造方法 `__init__`
    • 4.1 为什么需要构造方法
    • 4.2 基础用法
    • 4.3 注意事项
  • 五、入门易错点总结
  • 六、总结

前言

面向对象是 Python 编程的核心思想之一,它模拟现实世界的事物描述方式,将属性(数据)行为(功能)封装到类中,通过创建对象来完成业务逻辑。本文从最基础的类定义、对象创建讲起,带你掌握成员变量、成员方法、self关键字与构造方法,夯实面向对象入门基础。

一、面向对象思想入门

在程序中记录数据,如果只用字典、列表等基础结构,数据和行为是分离的,不仅写法混乱,也难以复用。面向对象的思路和现实生活一致:

  1. 设计表格(类):先定义好模板,规定要记录哪些信息、具备哪些功能
  2. 打印表格(创建对象):基于模板生成一个个独立的实体
  3. 填写表格(属性赋值):给每个实体填充专属数据

简单总结:类是设计图纸,对象是基于图纸生产的实体,一个类可以生成无数个对象,每个对象拥有独立的数据。

二、类的定义:成员变量与成员方法

2.1 基础语法

Python 中使用class关键字定义类,类由两部分组成:

  • 成员变量(属性):类中定义的变量,用于存储数据
  • 成员方法(行为):类中定义的函数,用于实现功能

语法格式:

class类名:# 成员变量变量名=# 成员方法def方法名(self,形参1,形参2...):方法体

2.2 self 关键字详解

成员方法的第一个参数必须是self,这是 Python 面向对象的核心规则:

  1. self代表当前对象自身
  2. 调用方法时self会由 Python 自动传入,无需手动传参
  3. 在方法内部访问成员变量,必须通过self.变量名的方式

补充说明:self只是约定俗成的命名,你可以改成其他名称,但行业通用self,不建议修改。

2.3 完整示例:学生类

classStudent:# 成员方法defsay_hi(self):print(f"大家好,我叫{self.name}")defsay_hi2(self):# 修复了原代码中括号位置错误的语法问题print(f"大家好,我是:{self.name},正在学习Python")# 创建两个独立的对象stu1=Student()stu1.name="张三"stu1.say_hi()stu2=Student()stu2.name="王五"stu2.say_hi2()

运行结果:

大家好,我叫张三 大家好,我是:王五,正在学习Python

三、类与对象的示例:闹钟类

我们用一个更贴近现实的案例,理解 “一个类生成多个对象” 的逻辑:

classClock:# 成员变量id=None# 序列号price=None# 价格# 成员方法:响铃defring(self):importwinsound# 参数:频率(赫兹)、持续时间(毫秒)winsound.Beep(2000,3000)print("闹钟正在响铃!")# 创建第一个闹钟对象clock1=Clock()clock1.id="10001"clock1.price=9.99print(f"闹钟1序列号:{clock1.id},价格:{clock1.price}")clock1.ring()# 创建第二个闹钟对象clock2=Clock()clock2.id="10002"clock2.price=19.99print(f"闹钟2序列号:{clock2.id},价格:{clock2.price}")clock2.ring()

易错提醒:winsoundWindows 系统专属模块,Linux/macOS 环境无法运行,跨平台场景建议替换为打印提示或其他音频库。

四、构造方法__init__

4.1 为什么需要构造方法

上面的代码中,我们需要手动逐个给属性赋值,当属性很多时代码非常繁琐。Python 提供了__init__构造方法:

  • 创建对象时自动执行
  • 可以接收参数,自动给对象属性赋值
  • 方法名前后必须各有两个下划线,属于魔术方法的一种

4.2 基础用法

classStudent:# 构造方法:创建对象时自动调用def__init__(self,name,age,tel):self.name=name# 给当前对象的name属性赋值self.age=age self.tel=telprint("Student对象创建成功!")# 创建对象时直接传参,自动完成属性赋值stu=Student("张三",22,"1008611")print(stu.name)print(stu.age)print(stu.tel)

4.3 注意事项

  1. 构造方法也是成员方法,第一个参数必须是self
  2. 无需提前在类中声明成员变量,在__init__中通过self.xxx赋值即可自动创建实例属性
  3. 类中定义的name = None类属性(所有对象共享),self.name实例属性(每个对象独有),注意区分

五、入门易错点总结

  1. 忘记写 self:成员方法第一个参数必须加 self,否则调用时会报错TypeError
  2. 方法内访问属性不加 self:直接写name会被识别为局部变量,必须写self.name
  3. 构造方法拼写错误:是__init__(两个下划线),不是_init_init
  4. 对象创建语法对象名 = 类名(),括号不能丢,否则拿到的是类本身而非对象

六、总结

  • 面向对象核心:类是模板,对象是实体,一个类可生成多个对象
  • 类 = 成员变量(存数据) + 成员方法(实现功能)
  • self代表当前对象自身,是方法的第一个参数,调用时自动传入
  • __init__构造方法用于对象初始化,创建对象时自动执行,可快速赋值属性
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 6:55:49

智能护理中心实时统计系统:从数据流处理到核心算法实现

1. 项目概述与赛题解析“智能护理中心统计”这个题目,乍一看可能觉得是简单的数据汇总,但作为2022年RoboCom世界机器人开发者大赛高职组国赛的赛题,它远不止于此。RoboCom大赛向来以贴近产业实际需求、考察选手综合工程能力著称,这…

作者头像 李华
网站建设 2026/8/23 6:54:54

快速幂算法精讲:从二分分治到二进制迭代,攻克大数幂运算

1. 项目概述:从“暴力乘”到“分治幂”的思维跃迁如果你还在用for循环傻傻地计算pow(x, n),那这篇文章就是为你准备的。我们这次要啃下的硬骨头,是算法面试和竞赛中一个经典且高频的考点:快速幂算法。标题里提到的50. Pow(x, n)、…

作者头像 李华
网站建设 2026/8/23 6:53:57

Java面试中的技术深度与幽默表达艺术

1. 面试场景还原:当严谨技术碰撞幽默灵魂去年冬天的一次Java高级开发岗面试让我至今记忆犹新。那天会议室玻璃上结着霜花,我作为面试官正准备考察第7位候选人。门被推开时,一位穿着格子衬衫的年轻人(后来知道叫张三)端…

作者头像 李华
网站建设 2026/8/23 6:50:17

从LibSVM鸢尾花分类到dlib人脸识别:机器学习实战进阶指南

1. 从鸢尾花到人脸:一次跨越经典与实战的机器学习之旅最近在整理一些老项目,发现很多朋友在入门机器学习时,常常在两个看似不相关的领域间徘徊:一个是经典的、教科书式的数据集实验,比如用LibSVM处理鸢尾花分类&#x…

作者头像 李华
网站建设 2026/8/23 6:50:08

基于springboot的学生宿舍信息管理系统(源码+lw+部署文档+讲解等)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/8/23 6:48:01

BS项目架构能力构建:从技术选型到微服务演进的实战指南

1. 项目概述:从“BS项目”到架构能力的系统性构建最近和不少同行交流,发现一个挺有意思的现象:很多朋友在简历上或项目经历里会写“负责BS项目架构设计”,但深聊下去,往往发现大家对“架构能力”的理解差异巨大。有人觉…

作者头像 李华