将函数转换为类的一个明显方法是将函数参数(或其中一些参数)转换为对象属性。例如:class Knapsack(object):
def __init__(self, seq, target):
self.seq = seq
self.target = target
self.solution = None
def solveIt(self):
if self.target == 0 or self.target in self.seq:
self.solution = (target,)
return True, self.solution
for r in range(len(self.seq),1,-1):
for subset in combinations(self.seq, r):
if sum(subset) == self.target:
self.solution = subset
return True, self.solution
return False, ()
现在您可以执行以下操作:
^{pr2}$
然后,添加__str__方法很简单:def __str__(self):
if self.solution is None:
self.solveIt()
return '{}\n{}'.format(len(self.seq),
','.join(map(str, self.solution)))
我添加self.solution的原因是,反复调用__str__不会反复计算结果。你也可以很容易地删除该成员并写下以下内容:def __str__(self):
solved, solution = self.solveIt()
return '{}\n{}'.format(len(self.seq),
','.join(map(str, solution)))
不管怎样,我不确定这是如何比函数更好。(事实上,更糟糕的是:对于函数,您总是可以使用functools.partial只在序列中绑定,或者同时在序列和目标中绑定,或者当然两者都不绑定,而对于类,您总是必须同时在这两者中绑定。)
也许你的教授给了你一些提示,告诉你如何使用这个物体,也许会有帮助?或者你的教授只是个白痴,不知道如何想出一个好的激励性作业来教你上课