You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何实现懒实例化?下述类代码是否属于懒实例化?

Python中的懒实例化实现及代码分析

一、你提供的代码不属于懒实例化

你给出的代码只是为类属性添加了类型注解,并没有实现懒实例化逻辑:

from abc import ABC

class User(ABC):
    first_name: str
    last_name: str

这段代码仅告知类型检查工具(如mypy)first_name和last_name的预期类型为str,但实例化User类时,这些属性并不会被自动创建,直接访问会抛出AttributeError。它没有任何延迟初始化的行为,和懒实例化无关。

二、Python中实现懒实例化的常见方案

懒实例化的核心是延迟对象或属性的创建/初始化操作,直到第一次被访问时才执行,以下是几种实用的实现方式:

1. 使用@property装饰器实现属性懒加载

适合单个属性的延迟初始化,常用于需要耗时操作(如数据库查询、文件读取)的场景:

class User:
    def __init__(self):
        self._first_name = None  # 用私有变量存储实际值

    @property
    def first_name(self):
        if self._first_name is None:
            # 模拟耗时的初始化逻辑
            self._first_name = "Gustavo"
        return self._first_name

第一次访问user.first_name时才会执行初始化,后续访问直接返回已缓存的值。

2. 重写__getattr__方法拦截属性访问

适合批量处理多个属性的懒加载,当访问不存在的属性时触发初始化:

class User:
    def __getattr__(self, name):
        if name == "first_name":
            self.first_name = "Gustavo"
            return self.first_name
        elif name == "last_name":
            self.last_name = "Felipe"
            return self.last_name
        raise AttributeError(f"'User' object has no attribute '{name}'")

只有第一次访问first_name或last_name时,才会创建并初始化这些属性。

3. 类级别的懒实例化(懒加载单例)

如果需要确保类只有一个实例,且延迟到第一次使用时创建:

class SingletonUser:
    _instance = None

    @classmethod
    def get_instance(cls):
        if cls._instance is None:
            cls._instance = cls()
        return cls._instance

调用SingletonUser.get_instance()时才会创建实例,多次调用返回同一个对象。

4. 用functools.lru_cache实现实例缓存

对于需要复用实例的场景,可借助缓存装饰器避免重复初始化:

from functools import lru_cache

class User:
    def __init__(self, user_id):
        self.user_id = user_id
        # 模拟耗时的初始化操作
        self.data = self._fetch_user_data()

    def _fetch_user_data(self):
        print(f"Loading data for user {self.user_id}")
        return {"full_name": "Gustavo Felipe"}

@lru_cache(maxsize=None)
def get_user(user_id):
    return User(user_id)

第一次调用get_user(1)会创建实例,后续调用直接返回缓存的实例,省去重复初始化的开销。

内容的提问来源于stack exchange,提问作者Gustavo Felipe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:52:22