设计模式大量依赖"面向对象思想",如果没有夯实的 OOP(Object-Oriented Programming)基础,理解许多模式会比较吃力。本篇将快速复习 Python 中与设计模式关系最紧密的 OOP 特性,让你在后续章节学习中更顺畅。
一、Python 的类与对象(Class & Object)
Python 是一门"完全面向对象"的语言:
一切皆对象,包括函数、类、模块甚至整数。
创建类非常简单:
python
class Animal:
def speak(self):
return "Hello"
实例化:
python
dog = Animal()
print(dog.speak())
设计模式中常见的"对象创建""对象组合""对象交互"等概念都以此为基础。
二、封装(Encapsulation)
封装意在"隐藏内部实现,只暴露必要接口"。
Python 没有强制访问控制,但通过约定实现封装:
_name:建议视为内部属性,不要在外部直接访问__name:触发名称改写(Name Mangling),进一步避免访问
示例:
python
class User:
def __init__(self, name):
self._name = name # 约定内部使用
self.__token = "xxx" # 强保护属性
def get_name(self):
return self._name
封装使得对象在设计模式中可以保持稳定的对外接口,并在内部自由调整结构。
三、继承(Inheritance)
继承允许子类复用父类的属性与方法。
示例:
python
class Animal:
def speak(self):
return "..."
class Dog(Animal):
def speak(self):
return "Woof"
继承是很多模式的基础,如 模板方法、装饰器、工厂模式 等。
但注意:
Python 更强调组合优于继承。
四、多态(Polymorphism)
多态让不同对象可以通过同一个方法名实现不同行为。
python
class Cat:
def speak(self):
return "Meow"
class Dog:
def speak(self):
return "Woof"
def animal_speak(a):
print(a.speak())
animal_speak(Cat())
animal_speak(Dog())
行为型设计模式(如策略、状态、命令等)大量依赖多态思想。
五、组合(Composition)
比继承更灵活的代码结构。
python
class Engine:
def run(self):
print("Engine running")
class Car:
def __init__(self):
self.engine = Engine()
def start(self):
self.engine.run()
组合是很多设计模式的核心,比如:
- 适配器
- 装饰器
- 外观
- 桥接
- 责任链
- 组合模式
组合可以让对象通过"拼装组件"实现功能,从而达到高扩展性。
六、抽象类与接口(ABC & Protocol)
Python 使用 abc.ABC 定义抽象类:
python
from abc import ABC, abstractmethod
class Payment(ABC):
@abstractmethod
def pay(self):
pass
Python 3.8+ 可使用 typing.Protocol 定义"接口风格"的约定:
python
from typing import Protocol
class Speakable(Protocol):
def speak(self) -> str: ...
这在实现策略模式、工厂模式、模板方法等时非常重要。
七、特殊方法(Magic Methods)
设计模式实现中常用 Python 魔术方法,如:
| 方法 | 用途 |
|---|---|
__call__ |
让对象可像函数一样调用 |
__new__ |
控制实例创建(常用于单例) |
__enter__ / __exit__ |
上下文管理器 |
__iter__ / __next__ |
迭代器模式基础 |
__getattr__ / __setattr__ |
动态代理的基础 |
例如,单例模式常通过重写 __new__ 来实现实例唯一性。
八、总结
本章快速回顾了 Python 的 OOP 核心特性,包括:
- 类与对象
- 封装
- 继承
- 多态
- 组合
- 抽象类与接口
- 魔术方法
掌握这些内容后,你就能更轻松理解和实现后续的设计模式示例。