文章目录
- 前言
- 一、面向对象思想入门
- 二、类的定义:成员变量与成员方法
-
- [2.1 基础语法](#2.1 基础语法)
- [2.2 self 关键字详解](#2.2 self 关键字详解)
- [2.3 完整示例:学生类](#2.3 完整示例:学生类)
- 三、类与对象的示例:闹钟类
- [四、构造方法 `init`](#四、构造方法
__init__) -
- [4.1 为什么需要构造方法](#4.1 为什么需要构造方法)
- [4.2 基础用法](#4.2 基础用法)
- [4.3 注意事项](#4.3 注意事项)
- 五、入门易错点总结
- 六、总结
前言
面向对象是 Python 编程的核心思想之一,它模拟现实世界的事物描述方式,将属性(数据) 和 行为(功能) 封装到类中,通过创建对象来完成业务逻辑。本文从最基础的类定义、对象创建讲起,带你掌握成员变量、成员方法、self 关键字与构造方法,夯实面向对象入门基础。
一、面向对象思想入门
在程序中记录数据,如果只用字典、列表等基础结构,数据和行为是分离的,不仅写法混乱,也难以复用。面向对象的思路和现实生活一致:
- 设计表格(类):先定义好模板,规定要记录哪些信息、具备哪些功能
- 打印表格(创建对象):基于模板生成一个个独立的实体
- 填写表格(属性赋值):给每个实体填充专属数据
简单总结:类是设计图纸,对象是基于图纸生产的实体,一个类可以生成无数个对象,每个对象拥有独立的数据。
二、类的定义:成员变量与成员方法
2.1 基础语法
Python 中使用 class 关键字定义类,类由两部分组成:
- 成员变量(属性):类中定义的变量,用于存储数据
- 成员方法(行为):类中定义的函数,用于实现功能
语法格式:
python
class 类名:
# 成员变量
变量名 = 值
# 成员方法
def 方法名(self, 形参1, 形参2...):
方法体
2.2 self 关键字详解
成员方法的第一个参数必须是 self,这是 Python 面向对象的核心规则:
self代表当前对象自身- 调用方法时
self会由 Python 自动传入,无需手动传参 - 在方法内部访问成员变量,必须通过
self.变量名的方式
补充说明:
self只是约定俗成的命名,你可以改成其他名称,但行业通用self,不建议修改。
2.3 完整示例:学生类
python
class Student:
# 成员方法
def say_hi(self):
print(f"大家好,我叫{self.name}")
def say_hi2(self):
# 修复了原代码中括号位置错误的语法问题
print(f"大家好,我是:{self.name},正在学习Python")
# 创建两个独立的对象
stu1 = Student()
stu1.name = "张三"
stu1.say_hi()
stu2 = Student()
stu2.name = "王五"
stu2.say_hi2()
运行结果:
text
大家好,我叫张三
大家好,我是:王五,正在学习Python
三、类与对象的示例:闹钟类
我们用一个更贴近现实的案例,理解 "一个类生成多个对象" 的逻辑:
python
class Clock:
# 成员变量
id = None # 序列号
price = None # 价格
# 成员方法:响铃
def ring(self):
import winsound
# 参数:频率(赫兹)、持续时间(毫秒)
winsound.Beep(2000, 3000)
print("闹钟正在响铃!")
# 创建第一个闹钟对象
clock1 = Clock()
clock1.id = "10001"
clock1.price = 9.99
print(f"闹钟1序列号:{clock1.id},价格:{clock1.price}")
clock1.ring()
# 创建第二个闹钟对象
clock2 = Clock()
clock2.id = "10002"
clock2.price = 19.99
print(f"闹钟2序列号:{clock2.id},价格:{clock2.price}")
clock2.ring()
易错提醒:
winsound是Windows 系统专属模块,Linux/macOS 环境无法运行,跨平台场景建议替换为打印提示或其他音频库。
四、构造方法 __init__
4.1 为什么需要构造方法
上面的代码中,我们需要手动逐个给属性赋值,当属性很多时代码非常繁琐。Python 提供了 __init__ 构造方法:
- 创建对象时自动执行
- 可以接收参数,自动给对象属性赋值
- 方法名前后必须各有两个下划线,属于魔术方法的一种
4.2 基础用法
python
class Student:
# 构造方法:创建对象时自动调用
def __init__(self, name, age, tel):
self.name = name # 给当前对象的name属性赋值
self.age = age
self.tel = tel
print("Student对象创建成功!")
# 创建对象时直接传参,自动完成属性赋值
stu = Student("张三", 22, "1008611")
print(stu.name)
print(stu.age)
print(stu.tel)
4.3 注意事项
- 构造方法也是成员方法,第一个参数必须是
self - 无需提前在类中声明成员变量,在
__init__中通过self.xxx赋值即可自动创建实例属性 - 类中定义的
name = None是类属性 (所有对象共享),self.name是实例属性(每个对象独有),注意区分
五、入门易错点总结
- 忘记写 self :成员方法第一个参数必须加 self,否则调用时会报错
TypeError - 方法内访问属性不加 self :直接写
name会被识别为局部变量,必须写self.name - 构造方法拼写错误 :是
__init__(两个下划线),不是_init_或init - 对象创建语法 :
对象名 = 类名(),括号不能丢,否则拿到的是类本身而非对象
六、总结
- 面向对象核心:类是模板,对象是实体,一个类可生成多个对象
- 类 = 成员变量(存数据) + 成员方法(实现功能)
self代表当前对象自身,是方法的第一个参数,调用时自动传入__init__构造方法用于对象初始化,创建对象时自动执行,可快速赋值属性