Python跳棋棋盘初始化时向二维列表添加对象报module不可调用错误
报错解决方案
报错原因
你出现TypeError: 'module' object is not callable报错的核心问题是导入逻辑错误:
你在Board.py中使用import Player as Piece语句将Player模块重命名为了Piece,此时代码中的Piece指向的是整个Player模块,而非你定义的Piece类,尝试调用Piece(row, col)相当于把模块当构造函数使用,不符合Python语法规则。
修复方法
- 修正导入语句:
如果你定义Piece类的文件名为Piece.py,将Board.py头部的import Player as Piece替换为:
如果你确实把from Piece import PiecePiece类写在了Player.py文件中,就修改导入语句为:from Player import Piece - 补充Piece类逻辑优化(可选但建议):
你当前的Piece类构造方法接收了x、y参数但没有实际赋值,直接固定为0,建议在构造方法中直接调用你写好的getLoc方法完成坐标初始化:def __init__(self, x, y): self.getLoc(x, y) self.isActive = False self.pieces = 12 self.radius = c.SQUARE // 2 - 8 - 适配你设定的棋盘规则:
如果你需要区分两队棋子,可给Piece类增加队伍标识属性,实例化时分别赋值即可,无需单独写两个类:# Piece类__init__增加team参数 def __init__(self, x, y, team): self.getLoc(x, y) self.team = team # 1对应一队,2对应二队 self.isActive = False self.pieces = 12 self.radius = c.SQUARE // 2 - 8 # Board初始化时对应赋值 elif row <= 2: self.board[row].append(Piece(row, col, 1)) elif row >= 5: self.board[row].append(Piece(row, col, 2))
内容的提问来源于stack exchange,提问作者dextrin
相关产品推荐
相关产品推荐

