Python:変数スコープとリストのカプセル化

私はクラスマップを持っています(簡略化):

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)

そしてクラスタイル:

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

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

私の問題は、クラスTileのitems []配列がクラスのインスタンス化のたびに共有されているようです。たとえば、FORループの最後に、     print(len(self.tiles [x] [y] .items) タイルごとに25を返します。それはなぜそうですか?私はサイズ1の25のリストを持っているはずですが、その代わりにループのリストサイズを0から25に増やしてください。助けてくれてありがとう:)

0

1 答え

あなたの items はクラス属性なので、すべてのインスタンスで共有されているようです。

class Tile:
    def __init__(self, type):
        self.items = []
        self.type = type
2
追加された
@gramm: try:my_list.index(x); ValueErrorを除く:handle_error()
追加された 著者 Sven Marnach,
それはうまくいきました。私はあなたの答えを受け入れます
追加された 著者 gramm,
ここにいる間に、list.index()がエラーを返すかどうかをテストするにはどうすればよいですか?私はGoogle上でこれを見つけることができません。
追加された 著者 gramm,