在 class 中创建一个函数,将自变量作为参数 (Python)

Creating a function inside a class with self variables as arguments (Python)

在 class 中,我想创建一个方法,将一些 self. 变量作为参数。

例如(一些代码取自),假设我有

class Summations(object):
    dct = {'A': 11, 'B': 4, 'C': 7, 'D': 12, 'E': 5, 'L': 2, 'M': 0, 'Z': 9}

    f_lst = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
    s_lst = ['H', 'I', 'J']
    t_lst = ['K', 'L', 'M', 'N']

    def get_results(self):
        # Sum each of the dictionary's values provided their corresponding keys exist in a specified list.

        f_sum = sum(self.dct.get(k, 0) for k in self.f_lst)
        s_sum= sum(self.dct.get(k, 0) for k in self.s_lst)
        t_sum= sum(self.dct.get(k, 0) for k in self.t_lst)

我试图避免 get_results 中所有求和的重复代码,并创建一个单独的 class 方法来处理这些求和,如下所示:

def do_sums(self, d, l):
    return sum(self.d(k, 0) for k in self.l)

并像这样在 get_results 中调用 do_sums

f_sum = self.do_sums(self, dct, f_lst)
s_sum = self.do_sums(self, dct, s_lst)
t_sum = self.do_sums(self, dct, t_lst)

这样的事情(class 的自变量用作 classe 方法中的参数)是否可能?如果是,语法将如何?

您可以使用getattr()动态访问属性;给出要查看属性的对象(self 此处)和一个带有属性名称的字符串:

def do_sums(self, d, l):
    return sum(getattr(self, d).get(k, 0) for k in getattr(self, l))

并传入 names:

f_sum = self.do_sums('dct', 'f_lst')
s_sum = self.do_sums('dct', 's_lst')
t_sum = self.do_sums('dct', 't_lst')

不需要传入self因为self.do_sums()是绑定方法

但是你在调用方法的时候已经知道了你的属性,所以你可以直接传入对象:

def do_sums(self, d, l):
    return sum(d.get(k, 0) for k in l)

并传入 self.dct 并列出对象:

f_sum = self.do_sums(self.dct, self.f_lst)
s_sum = self.do_sums(self.dct, self.s_lst)
t_sum = self.do_sums(self.dct, self.t_lst)