Skip to content

面向对象:类、继承、多态与元类

本章讲解 Python 面向对象编程的完整知识体系,从类与对象基础到元类和 __init_subclass__


快速开始

bash
# 进入示例项目
cd oop_demo

# 安装依赖
uv sync

# 交互式演示(推荐)— 按章节逐步探索 OOP 概念
uv run python -m app

# 运行测试(59 个测试,全覆盖)
uv run pytest -v

知识地图

类与对象基础 ──→ 属性与方法 ──→ 继承 ──→ 封装
      ↓              ↓            ↓         ↓
  class/实例     实例/类属性   super()    @property
  __init__       三种方法     MRO        私有属性

                ┌───────┴───────┐
                ↓               ↓
            多态            设计原则
                ↓               ↓
        ABC / Protocol    SOLID / 组合

          ┌─────┴─────┐
          ↓           ↓
       数据类       魔术方法
          ↓           ↓
    @dataclass    __str__/__eq__/__hash__
          │           │
          └─────┬─────┘

          元类 ──→ 子类钩子
            ↓           ↓
       metaclass   __init_subclass__

章节导航

章节文件主题代码位置验证方式
01类与对象基础类定义、实例化domain/book/model.pyCLI 菜单 1 / pytest -k basics
02属性与方法实例/类属性、三种方法domain/book/model.py, domain/member.pyCLI 菜单 2 / pytest -k basics
03继承super()、多重继承domain/book/model.pyCLI 菜单 3 / pytest -k inherit
04封装@property、私有属性domain/book/model.py, domain/member.pyCLI 菜单 4 / pytest -k encapsul
05多态ABC、Protocol、鸭子类型ports/catalog.pyCLI 菜单 5 / pytest -k polymorph
06设计原则组合、SOLIDservices/library.pyCLI 菜单 6 / pytest -k design
07数据类@dataclassdomain/record.pyCLI 菜单 7 / pytest -k dataclass
08魔术方法streq、容器协议domain/member.py, services/library.pyCLI 菜单 8 / pytest -k magic
09元类 ⭐选读metaclass、单例infra/singleton.pyCLI 菜单 9 / pytest -k metaclass
10子类钩子 ⭐选读init_subclassinfra/plugin.pyCLI 菜单 10 / pytest -k subclass

项目架构

oop_demo/ 采用 DDD 分层设计,所有文档中的代码示例均来自该项目:

oop_demo/
├── domain/      # 领域模型(Book, Member, Record)
├── ports/       # 接口定义(ABC, Protocol)
├── services/    # 应用服务(Library, Notification)
├── infra/       # 基础设施(元类, __init_subclass__)
└── utils/       # 工具函数
OOP 概念对应章节
domain/类定义、继承、封装、属性、魔术方法ch01-ch04, ch08
ports/ABC、Protocol、DIPch05, ch06
services/组合、SOLID、依赖注入ch06
infra/元类、__init_subclass__ch09, ch10

交互式演示

运行 uv run python -m app 后进入章节菜单:

  📚 图书馆管理系统 — OOP 学习演示

  1.  类与对象基础
  2.  属性与方法
  3.  继承
  4.  封装
  5.  多态
  6.  设计原则(SOLID)
  7.  数据类(@dataclass)
  8.  魔术方法
  9.  元类(metaclass)
  10. 子类钩子(__init_subclass__)

每章独立演示,可反复运行感兴趣的章节。