python - 如何获取class(__init__)的输入参数个数?

我想在 python 中获取每个科目的分数并返回其平均值和总和的类(class)分数。我知道如果我收到 4 个参数而不是平均分母应该是 4,但是我如何才能将它变成随输入数量变化的固定代码?,而不仅仅是计数数字和类型 4。我尝试了 Len(self) 或使用 for 循环计数,但 Len 出错,for 循环并不那么容易。

class score:
    def __init__(self, language, math, english, science):
        self.language = language
        self.math = math
        self.english = english
        self.science = science
        
    ...

    def sum_scores(self):
        result = self.language + self.math + self.english + self.science
        return result
    
    def average(self):
        average = self.sum_scores()/4 # Here is the problem!
        return average

这是我关于堆栈的第一个问题。很抱歉我的英语不好和愚蠢的问题。

最佳答案

首先不要使用 4 个单独的属性。使用dict 来存储属性;然后你可以查询dict的大小。

class score:
    def __init__(self, language, math, english, science):
        self.scores = {'language': language, 'math': math, 'english': english, 'science': science}
        
    ...

    def sum_scores(self):
        return sum(self.scores.values())
        
    
    def average(self):
        return self.sum_scores() / len(self.scores)

如果您仍然需要每个分数的属性,请使用属性:

class score:
    def __init__(self, language, math, english, science):
        self.scores = {'language': language, 'math': math, 'english': english, 'science': science}
        

    @property
    def language(self):
        return self.scores['language']

    # etc.


    def sum_scores(self):
        return sum(self.scores.values())
        
    
    def average(self):
        return self.sum_scores() / len(self.scores)

https://stackoverflow.com/questions/67287020/

相关文章:

python - 如何将有效值传入 cleartext_keyset_json 以创建 Tink k

Python - 用于从文本中获取特定行的正则表达式

r - 使用 data.table 在列表中查找完整集

c++ - 在以函数为参数的模板函数中提取输入参数的类型

linux - 如何在 AWK 中将字段分隔符设置为 ^@(特殊字符)?

django - 错误 : UPGRADE FAILED: another operation (i

regex - 我如何在 vim 中翻译正则表达式以与 sed 一起工作?

c - C 版本是否向后兼容?

python - Pandas pivot dataframe 并根据它们是否存在将新列设置为 Tr

generics - 如何使通用形式参数别名