2012-05-17 19 views
3

我有一个关于Python中的类init函数的查询。我在试图创建一个文本冒险游戏类型的环境,每个房间都有一个“物品”属性,存储为一个列表。我试过如下:Python __init__函数的变量标识 - 任何人都可以解释吗?

教室:

def __init__(self,items=[]): 
    self.items=items 

但是我发现这是每一个没有上开始定义的项目房间不仅得到一个空列表,但相同空的清单。现在,如果我创建了一堆房间并将其中的一个项目添加到其中一个项目中,则该项目会出现在每个房间中。

很容易修复(手动分配一个空的列表到每个房间),但我不明白为什么会发生这种情况。我会想象创建空间a会创建一个空的列表a.items,而b房间会创建b.items。但任何人都可以解释为什么这些会是相同的?有没有一种方法来产生上述函数的默认值,每次创建一个不同的列表?

干杯,

比利。

回答

3

你必须了解Python中的默认参数。 当你编写items = []时,你创建一个全局变量[],当你没有提供一个合适的参数时,你赋值给item。 这意味着每次项目采用默认值时,它将被分配相同的[]对象。 (请记住,和Java一样,变量只是对象的引用,所有的变量都是对同一个对象的引用)。

正式解释: http://effbot.org/zone/default-values.htm

你可以做的是:

def __init__(self, items=None): 
    if items is None: 
     items = [] 
    self.items = items 

这种方式,默认值,无,是从来没有改变过。当发现时,会创建一个新列表(这次是一个真正的新列表,而不是全球列表)。

相关问题