代码之家  ›  专栏  ›  技术社区  ›  TaxpayersMoney

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

  •  1
  • TaxpayersMoney  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  0
  •   Andrew McDowell    6 年前

    如果不知道你的游戏的确切形式,很难提出替代方案。如果每个建筑一次只与一个玩家关联,我会将其添加到初始化中并直接引用它。

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

    或者,如果每个玩家只有一个与之相关联的建筑,那么动作函数应该在玩家类中,而不是在建筑中。