在一个类中,我想创建一个方法,将某些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方法中用作参数的类的自变量)是否可能?如果是,语法将如何?
答案 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)