Python 面向对象基础复习

设计模式大量依赖"面向对象思想",如果没有夯实的 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 核心特性,包括:

  • 类与对象
  • 封装
  • 继承
  • 多态
  • 组合
  • 抽象类与接口
  • 魔术方法

掌握这些内容后,你就能更轻松理解和实现后续的设计模式示例。

相关推荐
2601_966949651 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
ZhengEnCi3 小时前
AI 真的会替代程序员吗:从 55.8% 提速到 19% 变慢的八组关键数据拆解
aigc·ai编程
晨曦中的暮雨3 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪4 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风4 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
濮水大叔5 小时前
AI Vibe Coding 实战:SMS 套件提示词与开发方案
ai编程·全栈·vibecoding
在世修行5 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_962885726 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
打工仔折腾 AI6 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友