面向对象编程(object-oriented programming, OOP)把程序中的事物建模成对象。对象把数据和处理这些数据的行为放在一起;类是描述共同结构与行为的模板,对象则是根据模板创建的实例。
🏠 房屋蓝图 → 房子同一蓝图能建造多栋地址、颜色不同的房子。
🍪 模具 → 饼干模具规定形状,每块饼干仍是独立实体。
📝 开户表 → 账户字段与规则相同,每个账户拥有自己的户主和余额。
类、对象、属性与方法
属性描述对象“有什么”,方法描述对象“能做什么”。多个对象可以使用同一套方法代码,但 self 让方法准确操作当前对象。
class BankAccount:
def deposit(self, amount):
self.balance += amount
def withdraw(self, amount):
self.balance -= amount
account = BankAccount()
account.owner = "Alice"
account.account = "6250941006528599"
account.balance = 50
account.deposit(100)
print(account.balance)互动实验
账户对象工厂:同一张蓝图,不同的状态
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
类和对象的关系更接近哪一种?
知识测验
题目
调用 account.deposit(100) 时,self 指向谁?
封装与有效状态
如果余额能被任意写成负数,账户对象就进入了无效状态。封装不是把数据藏得神秘,而是把变化集中到 deposit()、withdraw() 等明确入口,由入口验证规则。双下划线属性会触发名称改写,用来减少意外的外部访问;它是一种程序设计约定和保护机制,并不是安全加密。
构造方法
__init__() 在新对象创建时自动运行。它把创建对象所需的数据一次收齐,使每个对象从诞生起就具有完整、有效的初始状态。
class BankAccount:
def __init__(self, owner, account, balance):
self.__owner = owner
self.__account = account
self.__balance = balance
def get_balance(self):
return self.__balance
def deposit(self, amount):
if amount <= 0:
return False
self.__balance += amount
return True
def withdraw(self, amount):
if amount <= 0 or amount > self.__balance:
return False
self.__balance -= amount
return True互动实验
构造方法与私有状态:对象诞生的四步
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
封装的主要目的是什么?
知识测验
题目
__init__() 通常在什么时候执行?
动手练习
创建三个独立的学生对象
- 定义 Student,构造参数为 name 和 score。
- 实现 add_score(points)。
- 创建三个分数不同的对象,只给其中一个加 5 分,并打印全部分数。
动手练习
实现安全的银行账户
- 余额保存为私有属性。
- deposit 只接受正数。
- withdraw 拒绝非正数和透支。
- 完成两次合法操作和一次失败操作,打印返回值与余额。
动手练习
封装温度计
- Thermometer 用私有属性保存摄氏温度。
- set_celsius 拒绝低于 -273.15 的值。
- 提供 get_celsius() 和 get_fahrenheit()。
- 测试一次合法值和一次非法值。