• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Python – 使用类方法

python 来源:appleLover 4次浏览

我有一个类来表示NFL四分卫。在每个例子中都会有一个字典列表,其中每个条目都包含关于所玩游戏的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') 


===========解决方案如下:

你想要做两件事情:

  1. 创建一个类变量来包含所有创建的四分卫。 (我们称之为everyone
  2. 然后,在__init__方法中,通过将self附加到该列表中,将每个创建的四分卫添加到该列表中。

然后,当get_avg被调用时,您可以对该列表进行求和。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)