我正在写一个国际象棋游戏,我需要设置一个棋子的每个实例的属性self.selected(我刚刚点击的棋子的实例除外)等于False,当点击一个棋子时self.selected设置为True。
我认为问题在于我在超类中绘制后将鼠标左键单击到对象,因此我无法返回到可以在外部管理不同实例的全局函数。
基本上(如果我说这一切都错了),我有我的棋子,当我点击它时,它的属性self.selected变为True。如果选择了不同的棋子或者再次点击相同的棋子,我需要再次将该属性设置为False。
答案 0 :(得分:0)
使用类变量和property
:
class ChessPiece(object):
selected_piece = None # class variable
def select(self): # call this on the piece that's been clicked upon
ChessPiece.selected_piece = self
@property
def selected(self): # test this attribute to see if a piece is curently selected
return ChessPiece.selected_piece is self
如果你愿意,你可以使用全局变量而不是类变量,如果你这样做,你只需要在global
方法中使用select
语句,这样它就可以修改全局变量而不是本地变量。
您还可以使用setter
属性而不是单独的select
方法,但这需要(稍微)更复杂的代码来处理诸如将selected
设置为{{ 1}}当它已经False
。