使用自变量作为参数在类中创建函数(Python)

时间:2016-06-12 15:29:21

标签: python class python-3.x self

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

例如(某些代码来自here),说我有

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中所有求和的重复代码,并创建一个单独的类方法来处理这些求和,如下所示:

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

并在do_sums内调用get_results,如此

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)

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

1 个答案:

答案 0 :(得分:2)

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

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

并传入名称

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)