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

为什么Python第二次创建类实例时默认参数值会被保留?

问题原因

这个问题是Python里对象类型默认函数参数的求值特性导致的:Python的函数默认参数是在函数定义阶段完成求值的,不是每次调用函数的时候重新生成。
你写的Friend.__init__方法里默认参数是user = User(),这行代码只会在类定义的时候执行一次,生成唯一的一个User实例,所有没有传user参数创建的Friend实例,都会共享这同一个User对象。所以你修改friend_1绑定的User对象的name值,friend_2绑定的其实是同一个对象,自然读取到的就是修改后的值。

修复方案

把默认参数设为None,在函数内部每次调用的时候再创建User实例即可,修改后的Friend类代码如下:

class Friend:
    def __init__(self,user = None):
        # 每次调用__init__的时候,如果没传user就新建一个User实例
        if user is None:
            user = User()
        self.__user = user
        
    def get_user(self):
        return self.__user.get_name()
    
    def set_n(self,name):
         self.__user.set_name(name)

修改后创建friend_2的时候就会生成全新的User实例,读取到的name值就是预期的Empty name。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:54:03