Python:变量范围和列表的封装

时间:2011-10-28 10:08:54

标签: python

我有一个类Map(简化):

from Enums import *
import Globals
import Tile

class Map:
    tiles = []  #the actual map, it's a 2D list of Tile objects
    for x in range(Globals.mapWidth):
        for y in range(Globals.mapHeight):
            self.tiles[x][y].addItem(Items.Foliage)

并且是Tile类:

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

    def addItem(self,i):
        self.items.append(i)

我的问题是类Tile中的items []数组似乎在类的每个实例中共享。例如,在FOR循环结束时,     打印(LEN(self.tiles [X] [Y] .items) 每个瓷砖返回25。为什么会这样?我应该有25个大小为1的列表,但是在循环中打印列表大小会从0增加到25.有人可以解释一下这里发生了什么吗?非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

您的items是一个类属性,这就是为什么它似乎在所有实例之间共享。

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