如何涉及来自不同类的两个实例,python 2

问题描述:

我正在尝试为几个朋友创建一个足球比赛程序。我目前有一个类来实例化团队,我正在编写匹配实例化类。如何涉及来自不同类的两个实例,python 2

我目前拥有的是:

class Team(object): 
     def __init__(self, name, games=0, points=0, goals=0, wins=0, loses=0): 
    self.name  = name 
    self.points = points 
    self.games = games 
    self.goals = goals 
    self.wins  = wins 
    self.loses = loses 

    def win(self): 
    self.points += 3 
    self.wins += 1 
    self.games += 1 

    def lose(self): 
    self.points += 1 
    self.loses += 1 
    self.games += 1 

    def ratio(self): 
    print "(Wins/Loses/Games)\n ", self.wins, "/", self.loses, "/", self.games 

class Match(object): 
    def __init__(self, teamagoals, teambgoals): 
    self.teamagoals = teamagoals 
    self.teambgoals = teambgoals 

    def playgame(teama, teamb): 
    #conditional statements which will decide who wins 

alpha = Team("George's Team") 
beta = Team("Josh's Team") 
gamma = Team("Fred's Team") 

在这一点上我碰到如何去这样做的问题。按照我的问题,我试图在Match()类中涉及团队类的两个实例。例如,我想在Match()中调用一个函数,并指定团队Alpha和团队Gamma相互对抗,然后在他们赢或输时修改他们的实例相应的点,游戏等值。

我能做到这一点的方式是什么?是否可以通过将所有Team()实例放入列表中,然后将该列表导入到Match()类中?或者还有其他更优雅的方式吗?请帮忙。

+0

部分回答:您可以通过比较简单的方式更新团队实例。例如,'alpha.wins + = 1'。 – Windmill

+0

但是我应该怎么做呢?因为我不想在每次团队获胜时都必须进行硬编码,这会在代码中失败。 –

我不确定你打算如何选择哪支球队互相比赛,但可以说这是由一个功能完成的。然后,匹配可以实现如下:

class Match(object): 
    def __init__(self, teama, teamb): 
     self.teama = teama 
     self.teamb = teamb 
    def play(self): 
     a_points = 0 
     b_points = 0 
     # code/function call to decide how many points each team gets. 
     self.teama.points += a_points 
     self.teamb.points += b_points 
     if a_points > b_points: 
      self.teama.wins += 1 
     else if b_points > a_points: 
      self.teamb.wins += 1 
     else: 
      # code for when the teams draw 

我不知道你打算如何构建一些功能,如决定多少分的球队获得,但是这是一个框架,希望有用/给你对你如何做事情的想法。


跟进您的评论,如果你想成为能够在类外创建了特定的团队通过,你可以这样做如下: match1 = Match(gamma, alpha)。这将创建一个新的匹配实例,其中团队的“gamma”和“alpha”将被修改。 (该类中的teamateamb将引用这些对象。)

+0

使用这个框架作为框架,是否有一种方法可以让我们设置相当于例如团队Gamma的茶叶,以便它替代团队内的所有属性和功能? –

+0

我已经更新了答案来解释这一点。 – Windmill