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
相关产品推荐
相关产品推荐

