面向对象编程
面向对象编程
核心概念
- 类:对象的模板。
- 对象:类创建出来的实例。
- 属性:对象保存的数据。
- 方法:对象能执行的行为。
1 | class User: |
self
self 表示当前实例。调用方法时,Python 会自动把实例传进去。
1 | user.greet() |
等价于:
1 | User.greet(user) |
实例属性与类属性
1 | class Counter: |
实例属性属于单个对象,类属性属于类本身。
dataclass
1 | from dataclasses import dataclass |
适合主要用于保存数据的类。
property
1 | class Circle: |
property 可以把方法伪装成只读属性。
继承
1 | class Animal: |
继承适合表达「是一种」关系。
组合优先
很多时候,组合比继承更清晰。
1 | class Engine: |
组合适合表达「有一个」关系。
魔术方法
1 | class Money: |
常见魔术方法:
__init____repr____str____len____iter____eq____lt__
常见坑
- 把所有东西都写成类。
- 继承层级太深。
- 类属性误当实例属性使用。
- 方法偷偷修改太多外部状态。
练习
- 写一个
BankAccount类,支持存款、取款、查询余额。 - 用
dataclass表示一本书。 - 写一个
ShoppingCart,支持添加商品和计算总价。 - 把一个字典列表重构成类和对象。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Kalax524!