代码之家  ›  专栏  ›  技术社区  ›  NNikN

为什么第二个实例调用保留默认参数?[副本]

  •  0
  • NNikN  · 技术社区  · 3 年前

    当我执行下面的代码时,第一次打印name值时,它会打印正确的名称,即“John”。

    但当我创建第二个空实例时,它仍然打印名称“John”。 预期的输出应该是,它将只打印“空名称”,因为friend_2使用了一个新的空实例。

    class User:
        def __init__(self,name ="Empty name"):
            self.__name = name
            
        def get_name(self):
            return self.__name
            
        def set_name(self,word):
            self.__name = word        
            
    class Friend:
        def __init__(self,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_1 = Friend()
    # Only friendd_1 instance is being set to name John
    friend_1.set_n("John") 
    
    name_1 = friend_1.get_user()  # expected as we set John to friend_1 instance
    
    friend_2 = Friend()    # use new User empty instance
    
    name_2 = friend_2.get_user()  # This value is also John, but it should print "Empty value" as we are using default argument.
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   TheLazyScripter    3 年前

    如注释中所述,可变默认参数是常见的问题。

    class Friend:
        def __init__(self, user = None):
            # Default to None instead and then create the object during initialization 
            self.__user = user if user else User()