在 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)
在 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)