0

NFL クォーターバックを表すクラスがあります。各インスタンスには辞書のリストがあり、各エントリには、プレイしたゲームの QB 統計に関する情報が含まれています。DB 内のすべてのクォーターバックに基づいて、ゲームごとに獲得したヤードの平均数を生成する必要があります。インスタンスをループしたり、リストを作成したりするだけで、オブジェクト指向構造の外でこれを簡単に行うことができます...しかし、このオブジェクト指向スタイルを行うためのエレガントな方法が必要だと思います。したがって、この関数「get_avg」を作成したいと思います。「get_avg('pass_yards')」または「get_avg('pass_attempt')」のように、平均を求める変数の名前を渡します。存在するすべてのインスタンス、および各インスタンス内のすべてのゲームに基づく平均。

class qb:
  def __init__(self, name, espn_player_id):
      self.name = name
      self.espn_player_id = espn_player_id
      self.games=[]

  def add_game(self, g):
      self.games.append(g)

  @classmethod
  def get_avg(cls, var):
     ##create one list based on each game entry in each instance and return average


qb_data = s.query(Box_Score).filter(Box_Score.pass_attempt>8).all()
seen = set()
qbs = [qb(g.player_name, g.espn_player_id) for g in qb_data if g.espn_player_id not in seen and not seen.add(g.espn_player_id)]

for q in qbs:
    for g in [qb_game for qb_game in qb_data if qb_game.espn_player_id==q.espn_player_id]:
        q.add_game({"date": g.date, "pass_attempt": g.pass_attempt, "pass_made": g.pass_made, "q_team": g.team_name, "opp_team": "",
                    "pass_yards": g.pass_yards, "pass_td": g.pass_td, "pass_int": g.pass_int, "pass_longest": g.pass_longest})

print qb.get_avg('pass_attempt')
print qb.get_avg('pass_td')
4

2 に答える 2

2

次の 2 つのことを行います。

  1. 作成したすべてのクォーターバックを含むクラス変数を作成します。(それを呼びましょうeveryone
  2. 次に、__init__メソッドで、そのリストに追加することにより、作成された各クォーターバックをそのリストに追加selfします。

次に、 get_avg が呼び出されたときに、そのリストを合計して割ることができます。

于 2013-10-03T21:56:20.843 に答える