在Python类中共享变量的正确方法

2024-10-03 15:31:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为一个使用Python的游戏开发一个AI。因此,我有一个类“游戏”和一个类“人工智能”。你知道吗

我想在人工智能中使用一个游戏变量(例如游戏板),但我不确定最好的方法是什么。现在,我发现把游戏中的信息传递给人工智能的唯一方法就是每次都把它当作一个论据。我觉得有一种更好的方法可以和人工智能共享变量,而不需要每次都争论。你知道吗

我会做一些类似的事情(我知道这段代码不能工作,但仍然):

class Game():
    def __init__(self):
        self.board = 1 #It will be an array
        self.ai = AI(self.board)

    def functionThatUpdateTheBoard(self):
        self.board = 2

    def useTheAI(self):
        print(self.board)
        self.ai.getAction()

class AI():
    def __init__(self,board):
        self.board = board
        print(self.board)
    def getAction(self):
        print(self.board)

game = Game()
game.functionThatUpdateTheBoard()
game.useTheAI()

获得:

1
2
2

感谢您的帮助:)


Tags: 方法selfboardgame游戏initdef人工智能
1条回答
网友
1楼 · 发布于 2024-10-03 15:31:12

看看你能不能利用观察者模式。你知道吗

例如,创建订户并在“board”更改游戏类中的值时调用。 如果一个类需要更新的“board”值,他们可以订阅,这会在“board”值更改时触发。你知道吗

这样,无论所用数据类型的不变性如何,您都可以非常确定所更改的值。你知道吗

class Game(object):
 def __init__(self):
    self.board = 1
    self.observers = []

 def functionThatUpdateTheBoard(self, new_value): 
    # you can change this to setter ,
    # refer https://www.tutorialspoint.com/What-are-Getters-Setters-methods-for-Python-Class
    self.board = new_value
    for fn in self.observers:
        fn(self.board) # send your board value here.


 def subscribe(self, callback):
    self.observers.append(callback)

class AI(object):
  def game_board_value_changed(self, value):
      print("Printing value in AI class")
      print("Value of 'board' changed in Game class to {}".format(value))


game = Game()
ai = AI()
game.subscribe(ai.game_board_value_changed)
print("*"*50)
modified_value = 10
print("Board value changed in Main to {}".format(modified_value))
game.functionThatUpdateTheBoard(modified_value)
print("*"*50)
modified_value = 100
print("Board value changed in Main to {}".format(modified_value))
game.functionThatUpdateTheBoard(modified_value)
print("*"*50)

**************************************************
Board value changed in Main to 10
Printing value in AI class
Value of 'board' changed in Game class to 10
**************************************************
Board value changed in Main to 100
Printing value in AI class
Value of 'board' changed in Game class to 100
**************************************************

相关问题 更多 >