gpt4 book ai didi

python - 如何复制类变量 - Python

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:54 27 4
gpt4 key购买 nike

我正在制作一个使用 4x4 棋盘的游戏,我想检查一张牌是否已经按下。

为此,我使用了两 block 板。一个将用于计算(我要复制的变量),另一个将用于在游戏中显示(原始面板称为状态)。

我有以下一段代码,我想复制 TreasureHuntGrid 的状态变量并在同一个类的另一个函数中使用它。它应该独立于正在复制的变量,因此状态变量的变化不会影响计算变量。

我认为我这里的代码处理状态和计算变量是一样的。

我怎样才能独立对待它们?

class TreasureHuntGrid(GridLayout):
Finish.shuffle()
status = ListProperty(Finish.board) #Return a random lists of lists with 1 and -1
calculations = status
def __init__(self, *args, **kwargs):
super(TreasureHuntGrid, self).__init__(*args, **kwargs)

def button_pressed(self, button):
if self.calculations[row][column] != 2: #Check if it is pressed or not
button.text = {-1: Finish.surrounded(row, column), 1: 'X'}[self.sta$
button.background_color = colours[self.status[row][column]]
self.calculations[row][column] = 2

最佳答案

Python 中的一切都是命名空间。当您在类定义中定义 status = ... 时,类对象会获得一个新属性:TreasureHuntGrid.status。您希望将 statuscalculations 属性放入对象命名空间。为此,只需在 __init__() 中定义 self.statusself.calculations:

def __init__(self, *args, **kwargs):
super(TreasureHuntGrid, self).__init__(*args, **kwargs)
status = ListProperty(Finish.board) #Return a random lists of lists with 1 and -1
calculations = status

此外,请注意 Finish.shuffle() 只会在导入模块时调用一次。如果这不是您想要的,请将该行代码也放入您的构造函数中。

您可能对 Python 确定 self.status 含义的方式产生了困惑。如果您正在读取该字段,self.status 将重定向到父命名空间(如果它未在对象的命名空间中定义):TreasureHuntGrid.status。如果您分配给 self.status 而它不存在,则会创建它。要明白我的意思,您可能需要研究以下示例:

>>> class A:
... a = 1
...
>>> print A.a
1
>>> obj = A()
>>> print obj.a
1
>>> obj.a = 2
>>> print A.a
1
>>> print obj.a
2

如果您使用的是 Python 3,请将 print 的参数括起来。

关于python - 如何复制类变量 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34186977/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com