如果一个实例的属性为True,则将该类的每个其他实例的相同属性设置为False

时间:2015-08-15 02:28:52

标签: oop python-3.x

我正在写一个国际象棋游戏,我需要设置一个棋子的每个实例的属性self.selected(我刚刚点击的棋子的实例除外)等于False,当点击一个棋子时self.selected设置为True。

我认为问题在于我在超类中绘制后将鼠标左键单击到对象,因此我无法返回到可以在外部管理不同实例的全局函数。

基本上(如果我说这一切都错了),我有我的棋子,当我点击它时,它的属性self.selected变为True。如果选择了不同的棋子或者再次点击相同的棋子,我需要再次将该属性设置为False。

1 个答案:

答案 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