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

代码重构:如何避免Network对象重复实例化?

解决Network对象重复实例化的问题

方案一:通过config.py集中管理实例(你提到的方法完全可行)

这是最直观且易维护的方案,利用Python模块的单例加载特性(模块只会被解释器执行一次),将Network实例统一放在单独的配置文件中,其他模块直接导入使用即可:

  1. 新建config.py文件,在这里完成唯一一次Network实例化:
# config.py
# 假设Network类定义在network.py中,根据实际路径调整导入
from network import Network

# 全局唯一的Network实例
network_instance = Network()
  1. 修改order.py,删除自身的Network实例化代码,改为从config导入:
# order.py
from config import network_instance

# 后续直接使用network_instance即可,比如:
# network_instance.send_request(...)
  1. 修改shop.py,同样导入config中的实例,原有的order.py导入逻辑不受影响:
# shop.py
from config import network_instance
from order import process_order  # 按需导入order中的功能,无需再实例化Network

# 使用network_instance处理业务逻辑

这样不管order.py和shop.py如何互相导入,network_instance只会被创建一次,"Network object created"只会打印一次。

方案二:给Network类实现单例模式

如果不想新增config文件,也可以直接修改Network类,让它本身保证全局只有一个实例:

# network.py
class Network:
    _instance = None
    _initialized = False

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super().__new__(cls, *args, **kwargs)
        return cls._instance

    def __init__(self):
        # 确保初始化逻辑只执行一次
        if not self._initialized:
            print("Network object created")
            # 这里添加其他初始化代码,比如连接配置等
            self._initialized = True

之后不管你在order.py还是shop.py中调用Network(),都会得到同一个实例,初始化信息只会打印一次。

方案对比

  • 用config.py的方式更清晰,把实例的创建和使用分离,便于后续统一修改实例的创建逻辑(比如添加参数)。
  • 单例类的方式更适合需要在多处调用Network()但又要保证唯一实例的场景,对原有代码的改动更小(只需修改Network类,其他文件的实例化代码可以保留)。

内容的提问来源于stack exchange,提问作者Mahan Marwat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:25:48