You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于属性值筛选列出类的实例(国际象棋棋子按颜色筛选场景)

报错原因

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:15:03