能否在Python中将对象实例直接分配给列表?

能否在Python中将对象实例直接分配给列表?,python,list,class,instance,Python,List,Class,Instance,我定义了一个名为Space的类,用来表示9x9板上的空间。我想在程序开始时生成81个实例,方法是将它们分配给我打算用作二维数组的列表元素 下面是课程: class Space: def __init__(self, x_coord, y_coord): self.row = x_coord self.column = y_coord 下面是我将实例分配给列表(也称为空间)的一次尝试: 我的目标是能够使用列表索引引用实例,就像它们是坐标一样,即space[

我定义了一个名为Space的类,用来表示9x9板上的空间。我想在程序开始时生成81个实例,方法是将它们分配给我打算用作二维数组的列表元素

下面是课程:

class Space:
    def __init__(self, x_coord, y_coord):
        self.row = x_coord
        self.column = y_coord
下面是我将实例分配给列表(也称为空间)的一次尝试:

我的目标是能够使用列表索引引用实例,就像它们是坐标一样,即
space[1][2]。value=3

我想做的事可能吗?是否有更好的方法来整体生成实例?谢谢

编辑:(我下面的回答更具可读性)

脚本将运行,但在命令提示下尝试访问列表时,似乎没有定义列表

>>> space[1][2].value = 3
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
NameError: name 'space' is not defined
>>> space[1][1]
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
NameError: name 'space' is not defined
>空格[1][2]。值=3
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“space”
>>>空格[1][1]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“space”

您必须使用基于0的索引,但这将实现您想要的:

space = [[Space(i,j) for j in range(9)] for i in range(9)]

听起来好像你从来没有创建你试图用来存放
空间
对象的
空间
列表。有一种方法可以做到这一点,从一个空列表开始,然后在执行时将值追加到列表中:

space = [] # initially empty list
for i in range(9):
    column = [] # create an empty list to hold a column of values
    for j in range(9):
        column.append(Space(i, j)) # add the object to the column
    space.append(column) # add the column to the outer list
一个更干净、更“Pythonic”的解决方案是使用nested,如isedev的回答所示:

space = [[Space(i, j) for j in range(9)] for i in range(9)]

最后请注意,在代码中使用同一个单词,但对不同的内容只使用大小写差异,这可能是个坏主意。可以使用名为
foo
的变量来保存单个
foo
实例,但更好的名称可以指示该实例的用途,例如
foo\u for\u frobbing
。在您的情况下,
board
可能是比
space
更好的名称,用于您的
space
实例列表。

您的“尝试”有什么问题?请将您的回溯添加到您的问题中,以便我们可以阅读。这是一个问题,但它是一个单独的问题。您在哪里定义了
空间
?您已经在某个地方定义了它,对吗?听起来您想从
列表继承
,或者添加一个
\uuu getitem\uuuu
函数。我想我已经在
空格[I][j]=空格(I,j)
行中定义了它。话虽如此,在循环之前我还插入了一个
space=[]
,但没有起到任何作用。这似乎与我的尝试有着相同的问题:我可以运行脚本,但任何访问列表的尝试都会给我带来错误
NameError:name'space'没有定义
@smohyee:你能给出一个更完整的例子吗。它通常表示您尚未在当前范围内定义“空格”。啊。。。上面也有一个拼写错误(在“i”和“range”之间缺少“in”)。现在更正。
space = [[Space(i, j) for j in range(9)] for i in range(9)]