我想消除以下两个方法中的代码重复,方法是将公共代码移到一个可由两个方法调用的单独方法中。注释指出了在每个方法中具有不同实现的代码块。在def compute_totals_h(self, size, bad_codes):
with open(self._in_file_path, self._FILE_READ_MODE) as f:
# initialize reader
reader = csv.reader(f)
field_names = reader.next()
for i, code in enumerate(field_names):
code = code.strip(string.punctuation).upper()
field_names[i] = code
for code in field_names:
if (len(code) <= size) and (code not in bad_codes):
self._totals[code] = 0
for row in reader:
# get totals
for i, val in enumerate(row):
code = field_names[i]
if (code in self._totals):
self._totals[code] += string_utils.to_int(val)
self._write_totals()
def compute_totals_v(self, code_field, est_field):
with open(self._in_file_path, self._FILE_READ_MODE) as f:
# initialize reader
reader = csv.DictReader(f)
for row in reader:
# get totals
code = row[code_field].strip(string.punctuation).upper()
est = string_utils.to_int(row[est_field])
if code in self._totals:
self._totals[code] += est
else:
self._totals[code] = est
self._write_totals()
我在想一个解决方案,它有一个通用的抽象方法,可以从compute_totals_h和{}调用,每个方法都传递函数来处理它的实现。我不知道如何在正确传递每个实现的参数的同时做到这一点。它看起来像:
^{pr2}$
我也很欣赏关于如何更好地处理这种类型的代码重构的建议,以消除这类常见的代码重复问题。在