按实例属性遍历类的实例

2024-10-04 11:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为House的类,我想制作一些实例,这些实例将以可视化方式排列在网格中:

class House(object):

    def __init__(self, row, col):
        self.row = row
        self.col = col
        self.rooms = 0

我想按行和列遍历这个网格中House的所有实例:

for row in range(GRIDHEIGHT):
   for col in range(GRIDWIDTH):

      thisHouse = House()
      thisHouse.row = row
      thisHouse.col = col

在后面的代码中,我想通过已创建的实例进行循环。。。你知道吗

for row in range(GRIDHEIGHT):
   for col in range(GRIDWIDTH):

      ??? something something ??? 

         if thisHouse.room =< 1:
            do stuff
         else: 
            thisHouse.room = +1
      etc

那个“?”???有什么吗在那里我不知道如何继续,不知何故,这所房子的实例必须搜查(通过thisHouse.row公司以及这个房子.col我应该认为)直到与网格高度和网格宽度中的行和列匹配,希望这是有意义的。我不知道如何做到这一点,到目前为止的研究表明,目录()可能是有用的,但似乎显示的属性,但不是属性的内容。你知道吗

也许“?”???有什么吗应该是。。。你知道吗

for thisHouse.row = row and thisHouse.col = col:

但我不认为这会奏效。我在这里大修了一大块代码,所以现在不能只测试这一点,所以建议感谢。你知道吗


Tags: 实例代码inself网格forrangecol
2条回答

IIUC,你想达到的目标是:

import itertools

class House(object):

    def __init__(self, row, col):
        self._row = row
        self._col = col

GRIDHEIGHT = 10
GRIDWIDTH = 10

houses = {(col, row): House(row, col) for col, row in 
          itertools.product(range(GRIDWIDTH), range(GRIDHEIGHT))}

或者,也可以使用双嵌套词典:

houses = {col: {row: House(row, col) for row in range(GRIDHEIGHT)} for col in range(GRIDWIDTH)}

可通过houses[(col, row)]houses[col][row]进入相关房屋:

for col in range(GRIDWIDTH):
    for row in range(GRIDHEIGHT):
       houses[col][row].foo() # or houses[(col, row)].foo()

你为什么不把问题翻过来?将网格信息存储在房屋上,而不是将房屋/对象信息存储在网格上。 你可以有一个代表网格的二维数组,然后在每个单元格,你有你想要的信息,也就是在那个单元格中的对象,这取决于你是否有一个对象的通用集合,或者像字典一样把它们分开,在那里你有房子,宠物,汽车的标签。你知道吗

一些psudo代码:

for x in grid:
    for cell in x:
       #here you have the cell:
       for obj in cell.objs:
          if (obj is House):
             do stuff

当然,如果你对你想做的事情有更深入的了解,你可以优化你在单元格内的搜索,比如:

for x in grid:
    for cell in x:
       #here you have the cell:
       for h in cell.objs["houses"]:
             do stuff

当然,您仍然可以在house类中保存坐标信息。 以这种方式放置数据,即使分布不均匀,也可以很容易地遍历房屋,还可以进行查找邻居等操作

相关问题 更多 >