函数工厂使用Python中的嵌套函数和工厂类

时间:2014-09-16 21:34:16

标签: python factory nested-function

我查看了函数工厂的示例,但我仍然无法理解...我有一个类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

0 个答案:

没有答案