大家好,我是 亦难。
昨天刚写完开坑宣言,今天就兑现周更 flag:用 1 天时间把所有 OOP 要点撸了一遍,并做了可运行的 Demo。
如果你也在“知道 class 怎么写,却写不出优雅类”的阶段,这篇一定能帮你把零散知识串成线。
🧭 今日学习路线(脑图速览)
面向对象思想 → 类与对象 → 魔术方法 → 三大特性 → 实战案例
1️⃣ 面向过程 VS 面向对象
-
面向过程:按步骤报名——“学生提出→缴费→分配班级”。
-
面向对象:先找主体——学生、机构、教师、班级,再让主体各干各的事。
一句话总结:先找“谁”,再想“干什么”。
2️⃣ 类 & 对象 30 秒上手
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'{self.name}({self.age})'
p1 = Person('老王', 18)
print(p1) # 老王(18)
-
__init__
:构造函数,给对象“贴标签”。 -
__str__
:打印对象时的“颜值担当”。 -
self
:谁调用就指向谁,相当于每个对象的「身份证」。
3️⃣ 魔术方法全家桶速查表
方法 | 触发时机 | 常用场景 |
---|---|---|
__init__ | 实例化 | 属性初始化 |
__str__ | print(obj) | 友好打印 |
__del__ | 对象销毁 | 关闭文件/数据库连接 |
4️⃣ 三大特性 3 张图秒懂
🔒 封装
class Girl:
def __init__(self, name):
self.name = name
self.__age = 18 # 私有属性
def get_age(self): # 访问接口
return self.__age
意义:把数据藏起来,只留安全窗口。
5️⃣ 实战 1:学员成绩等级
class Student:
def __init__(self, name, score):
self.name, self.score = name, score
def print_grade(self):
level = '优秀' if self.score >= 90 else \
'良好' if self.score >= 80 else \
'中等' if self.score >= 70 else \
'及格' if self.score >= 60 else '不及格'
print(f'{self.name}:{self.score}分→{level}')
tom = Student('Tom', 80); tom.print_grade()
6️⃣ 实战 2:小明减肥模拟器
class Person:
def __init__(self, name, weight):
self.name, self.weight = name, weight
def __str__(self):
return f'{self.name} 目前 {self.weight:.1f} kg'
def run(self): self.weight -= 0.1
def eat(self): self.weight += 0.2
xm = Person('小明', 75.0)
xm.eat(); xm.run(); print(xm) # 75.1 kg
把 属性变状态,方法变行为,OOP 的“对象感”一下就出来了。
🚩 明日预告
《继承与多态:为什么“猫”既是“动物”又是“萌宠”?》