У меня есть класс для представления защитников НФЛ. В каждом случае будет список словарей, где каждая запись содержит информацию о статистике QB для игры. Мне нужно создать среднее количество ярдов, полученных за игру, на основе всех защитников в моей БД. Я мог бы легко сделать это за пределами объектно-ориентированной структуры, просто перейдя через мои экземпляры, построив список и т. Д., Но я думаю, что должен быть элегантный способ сделать этот объектно-ориентированный стиль. Поэтому я хотел бы построить эту функцию «get_avg», я передам ей имя переменной, в которой я хочу получить среднее значение, например «get_avg (« pass_yards ») или« get_avg ('pass_attempt »), и он должен вернуться в среднем на основе каждого экземпляра и каждой игры в каждом экземпляре.Python - Использование метода класса
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')
Вы могли бы иметь 'get_avg)' принимает (в качестве параметра список всех 'qb' случаях требуется усреднение, или вы можете сохранить этот список как переменную класса и добавьте ее в '__init__', как упоминает @yan. –