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

Python类__init__方法可变默认参数异常:实例共享数据问题

问题原因与解决方法

原因

Python里函数的默认参数是在函数定义阶段就创建完成的,而非每次调用函数时重新生成。像list、dict这类可变对象作为默认参数时,所有使用默认值的实例都会共享同一个对象。当你在某个实例中修改children或values(比如往列表中添加元素),这个修改会直接作用在共享的默认对象上,后续创建的实例如果使用默认参数,自然会拿到带有已有数据的对象。

解决方法

将可变类型的默认参数改为None,在__init__方法内部判断并初始化新的空对象,确保每个实例拥有独立的values和children:

class PolicyJSON:
    def __init__(this, path: str = "", values: dict = None, children: list = None, parent=None):
        this.path = path
        # 初始化独立的空字典,避免实例间共享
        this.values = values if values is not None else {}
        # 初始化独立的空列表,避免实例间共享
        this.children = children if children is not None else []
        this.parent = parent 
        this.path = this.getfullpath()

这样每次创建PolicyJSON实例时,若未传入values或children,都会生成全新的空字典和列表,各个实例的values、children不会互相干扰,就能正常创建空实例了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:33:12