Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从类中获取每个变量实例的列表?_Python_Python 3.x_Class - Fatal编程技术网

Python 如何从类中获取每个变量实例的列表?

Python 如何从类中获取每个变量实例的列表?,python,python-3.x,class,Python,Python 3.x,Class,我试图找到一种方法,从Basketball类中获取self.average变量的所有实例的列表。然后我将执行max(list)以获得最大值 class Basketball: def __init__(self, name, goals, shots): self.name = name self.goals = goals self.shots = shots self.average = shots / goals

我试图找到一种方法,从
Basketball
类中获取
self.average
变量的所有实例的列表。然后我将执行
max(list)
以获得最大值

class Basketball:
    def __init__(self, name, goals, shots):
        self.name = name
        self.goals = goals
        self.shots = shots
        self.average = shots / goals

    def display_average(self):
        """
        >>> b1 = Basketball("Karen", 20, 80)
        >>> b1.display_average()
        'Player: Karen, average goals per game: 4'
        """
        returnString = f"Player: {self.name}, average goals per game: {self.average:.2f}"
        return returnString

if __name__ == "__main__":
    player1 = Basketball("Karen", 20, 80)
    print(player1.display_average())
    player2 = Basketball("Alex", 4, 19)
    print(player2.display_average())

您可以创建一个列表并在其中存储该类的所有实例。然后,您可以从列表中提取所有平均值,并从中获取最大值。我会使用如下列表:

if __name__ == "__main__":
    basketball_list = []
    basketball_list.append(Basketball("Karen", 20, 80))
    basketball_list.append(Basketball("Alex", 4, 19))
    best_avg = max([i.average for i in basketball_list])

“我正试图找到一种方法,从篮球课上获得“self.average”变量的所有实例的列表。”我不清楚你的意思。您需要跟踪自己创建的类实例。类不会自动跟踪它们的实例。您可以记住构造函数中的所有
平均值
值。。。但话说回来,如果有人更改了它们,例如,如果在实例化后编写
player1.average=11
,您希望发生什么?重新打开,因为让类自动跟踪其实例是解决此问题的一种糟糕方法(也是解决几乎任何建议使用自动跟踪作为解决方案的问题的糟糕方法)。使用显式容器对象几乎总是更好的。Karen和Alex是
Basketball
s<代码>;-)为什么不在创建类实例时将其存储在列表中?然后您可以使用类似于
max([i.average for i in instance\u list])的方法获得最大值。