如何基于属性值筛选列出类的实例(国际象棋棋子按颜色筛选场景)
报错原因
type object 'Grid' has no attribute 'color'报错的核心是:color是Grid实例对象的属性,不属于Grid类本身,你之前的写法错误地直接操作了Grid类,而非已经创建的棋子实例。
完整修改方案
1. 完善Grid类定义
你需要补充类的初始化逻辑,同时新增一个类属性存储所有已创建的棋盘格实例,方便后续遍历筛选:
class Grid(object): # 类属性:存储所有创建的Grid实例 all_grids = [] def __init__(self, piece, color): # 将传入参数赋值给当前实例属性 self.piece = piece self.color = color # 新创建的实例自动加入全局存储列表 Grid.all_grids.append(self)
2. 示例棋子创建逻辑不变
你原有的实例创建代码不需要调整:
# 示例棋子 A1 = Grid("White Rook", "White") A2 = Grid("White Pawn", "White") A3 = Grid(" ", " ") A4 = Grid(" ", " ") A7 = Grid("Black Pawn", "Black") A8 = Grid("Black Rook", "Black")
3. 实现筛选函数
遍历存储所有实例的类属性即可完成按颜色筛选:
def select_piece(target_color): for grid in Grid.all_grids: if grid.color == target_color: # 过滤没有棋子的空格 if grid.piece.strip(): print(grid.piece)
调用示例
# 输出所有白棋 select_piece("White") # 输出所有黑棋 select_piece("Black")
原代码错误说明
- 第一种写法中
for grid in Grid():Grid()是创建新的Grid实例,既缺少必填的传参,也无法遍历已经创建的所有棋子实例 - 第二种写法中
selection = Grid(color):color是未定义变量,且将Grid实例直接和字符串"White"对比逻辑不成立,后续引用的grid变量也未定义。
内容的提问来源于stack exchange,提问作者Zaquaeis
相关产品推荐
相关产品推荐

