如何更好地构造我的类和属性?

时间:2018-09-27 10:27:55

标签: python-3.x oop

我正在尝试使用python和面向对象的程序来编写棋盘游戏。但是,我的类和属性的结构似乎有些曲折,即使我已使其按自己的意愿去做。它看起来不太优雅,我相信这会导致事情变得过于复杂,并且随着我的前进,使代码难以遵循。我将尝试给出一个简单的例子,说明我如何组织事物:

class GameState:
    def __init__(self, n_players):
        self.n_players = n_players
        self.players = []
        for player in range(self.n_players):
            self.players.append(Player(player))
        // other properties

    // other functions

class Player:
    def __init__(self, name):
        self.name = name
        self.building = Building()
        self.workers = 3
        // other properties

class Building:

    def __init__(self):
        self.worker = False

    def action(self, player):
        if self.worker == True:
            player.workers += 1

但是现在,如果我想让玩家使用建筑动作,则必须执行以下操作。感觉我应该能够更好地构造事物,而不必将Player类的实例传递给Building action函数。

game = GameState(4)
game.players[0].building.action(game.players[0])

这个想法是,每个玩家都有一个Building类的实例。

1 个答案:

答案 0 :(得分:0)

在不知道游戏确切格式的情况下很难提出其他建议。如果每个建筑物一次只与一个玩家相关联,则可以将其添加到初始化中并直接引用。

class Building:
    def __init__(self, player):
        self.worker = False
        self.player = player

    def action(self):
        if self.worker == True:
            self.player.workers += 1

或者,如果每个玩家只会拥有一个与之关联的建筑物,那么动作功能应该应该在玩家类别中,而不是建筑物中。