Python面试题更新 2026-08-03

请阐述在 Python 语言中实现单例模式的具体方法有哪些?

考察说明

考查对Python单例模式实现方式及原理的理解。

回答思路

  1. 【回答框架 1】单例模式确保一个类仅有一个实例,并提供一个全局访问点。Python中常见实现包括:使用模块(模块天然单例,导入一次即只有一个实例)、使用__new__方法重写来控制实例创建、使用装饰器缓存实例、使用元类(metaclass)来控制类实例化过程。
  2. 【回答框架 2】基于__new__的实现:在类的__new__方法中判断类属性_instance是否为None,若为None则创建实例并赋值,否则返回已有实例。注意线程安全问题,可通过加锁(如threading.Lock)来保证多线程环境下只创建一次实例。
  3. 【回答框架 3】基于装饰器的实现:定义一个装饰器,内部使用字典缓存类实例,键为类,值为实例。调用类时检查缓存,命中则返回缓存实例,否则创建并缓存。此方式无需修改类本身,可适用于任何类。
  4. 【回答框架 4】基于元类的实现:定义元类,在元类的__call__方法中控制实例创建。元类的__call__在类被调用时执行,同样通过判断是否已有实例来决定创建或返回。元类方式更符合Python的面向对象特性,且能统一管理多个类的单例化。
  5. 【关键点 1】模块是天然的单例实现方式。
  6. 【关键点 2】重写__new__是常用方法,需处理线程安全。
  7. 【关键点 3】装饰器和元类提供了灵活的单例实现途径。
  8. 【易错点 1】忽略线程安全导致多线程下创建多个实例。
  9. 【易错点 2】使用__new__时要注意基类object的__new__正确调用。
  10. 【易错点 3】单例模式在序列化、多进程等场景下可能失效。