第 34 课 · 阶段六 · 面向对象

面向对象:类与对象

从“面向过程”进入“面向对象”:把数据(属性)和操作(方法)打包成“类”。这一课写第一个类,理解 __init__ 与 self。

第 34 课阶段六 · 面向对象难度:进阶建议时长:40 分钟关键词:class · 对象 · __init__ · 方法

🎯 学完本课你将掌握

  • 理解类、对象、属性、方法的概念
  • 掌握 __init__ 构造方法
  • 理解 self 的含义
  • 写出并实例化自己的类

一、什么是面向对象

面向过程关心“先做什么再做什么”;面向对象关心“谁是主角、它有什么、它能做什么”。比如“小狗”是一个类,具体某只叫旺财的小狗就是一个对象。

二、类与对象

类(class):模板/蓝图;对象(object):根据模板造出来的具体实例。一个类可以创建无数个对象。

三、第一个类

第一个类.py
1class Dog:
2 def bark(self):
3 print("汪汪!")
4
5# 创建对象
6wangcai = Dog()
7wangcai.bark() # 汪汪!

四、__init__:构造函数

__init__ 在创建对象时自动执行,用来给对象设置初始属性。第一个参数 self 指向“当前这个对象”。

__init__ 用法.py
1class Dog:
2 def __init__(self, name, age):
3 self.name = name # 属性:名字
4 self.age = age # 属性:年龄
5
6 def bark(self):
7 print(f"{self.name}:汪汪!")
8
9d1 = Dog("旺财", 3)
10d2 = Dog("来福", 5)
11d1.bark() # 旺财:汪汪!
12d2.bark() # 来福:汪汪!
13print(d1.name, d1.age) # 旺财 3
✅ 要点
self 就是对象自己:self.name = name 把传入的值存到当前对象上。调用时不需要自己传 self。

五、属性与方法

概念说明示例
实例属性属于具体对象self.name
方法对象能做的事def bark(self)
类属性所有对象共享类名.类属性
类属性.py
1class Dog:
2 species = "犬科" # 类属性:所有实例共享
3
4 def __init__(self, name):
5 self.name = name
6
7d1 = Dog("旺财")
8d2 = Dog("来福")
9print(d1.species) # 犬科
10print(d2.species) # 犬科
11Dog.species = "宠物犬"
12print(d1.species) # 宠物犬 修改类属性影响所有实例

六、实战:学生类

学生类.py
1class Student:
2 def __init__(self, name, score):
3 self.name = name
4 self.score = score
5
6 def show(self):
7 status = "及格" if self.score >= 60 else "不及格"
8 print(f"{self.name} 考了 {self.score} 分,{status}")
9
10 def upgrade(self, add):
11 self.score += add
12
13s = Student("小明", 58)
14s.show() # 小明 考了 58 分,不及格
15s.upgrade(5)
16s.show() # 小明 考了 63 分,及格

七、常见错误与解决

常见错误与解决

错误现象原因 / 解决方法
TypeError: __init__() missing argument创建对象时没传够参数,检查 __init__ 的参数与调用是否一致。
方法忘记写 self第一个参数必须是 self,否则调用报错参数不匹配。
NameError: name 'xxx' not defined属性前漏了 self.(如写成 name 而应是 self.name)。
✍️ 小练习
定义一个 Car 类:属性有品牌、颜色、速度;方法有 accelerate(加) 和 brake(减),并打印当前速度。
📌 本节小结
类=模板,对象=实例;__init__ 初始化属性,self 指代当前对象;类属性共享、实例属性独有。你已经迈入了面向对象的大门,下一课学继承让类之间产生关系。