第 34 课 · 阶段六 · 面向对象
面向对象:类与对象
从“面向过程”进入“面向对象”:把数据(属性)和操作(方法)打包成“类”。这一课写第一个类,理解 __init__ 与 self。
🎯 学完本课你将掌握
- 理解类、对象、属性、方法的概念
- 掌握 __init__ 构造方法
- 理解 self 的含义
- 写出并实例化自己的类
一、什么是面向对象
面向过程关心“先做什么再做什么”;面向对象关心“谁是主角、它有什么、它能做什么”。比如“小狗”是一个类,具体某只叫旺财的小狗就是一个对象。
二、类与对象
类(class):模板/蓝图;对象(object):根据模板造出来的具体实例。一个类可以创建无数个对象。
三、第一个类
第一个类.py
1class Dog:2 def bark(self):3 print("汪汪!")45# 创建对象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 # 属性:年龄56 def bark(self):7 print(f"{self.name}:汪汪!")89d1 = 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 = "犬科" # 类属性:所有实例共享34 def __init__(self, name):5 self.name = name67d1 = 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 = name4 self.score = score56 def show(self):7 status = "及格" if self.score >= 60 else "不及格"8 print(f"{self.name} 考了 {self.score} 分,{status}")910 def upgrade(self, add):11 self.score += add1213s = 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 指代当前对象;类属性共享、实例属性独有。你已经迈入了面向对象的大门,下一课学继承让类之间产生关系。