我查看了函数工厂的示例,但我仍然无法理解...我有一个类Sample
。对于从该类实例化的对象,我有一个属性:一个函数f
告诉我不同的单词(例如'one'或'two')。为此,我创建了一个Factory
,我在其中为每个样本定义f
。所有样本都存储在SampleCollection
类中。然后,我为集合中的每个样本调用函数f。我无法理解为什么输出'两个'和'两个',而不是'一个'和'两个',正如我所期待的那样......
class Sample():
def __init__(self):
self.f = None
def call_f(self):
print self.f()
class SampleCollection():
def __init__(self):
self.container = []
def add(self, sample):
self.container.append(sample)
class Factory():
def __init__(self, collection):
self.collection = collection
def generate_f(self, words):
for w in words:
def f(): return w
s = Sample()
s.f = f
self.collection.add(s)
col = SampleCollection()
fab = Factory(col)
words = ['one', 'two']
fab.generate_f(words)
for s in col.container:
s.call_f()
UPD:感谢您的回答!我不知道它是如何正确调用的。示例解决方案是更改函数定义:def f(w=w): return w
。