python类中方法的动态分配

时间:2013-03-25 14:46:32

标签: python

我想动态地在类__init__方法中创建一堆方法。到目前为止还没有运气。

CODE:

class Clas(object):
    def __init__(self):
        for i in ['hello', 'world', 'app']:
            def method():
                print i
            setattr(self, i, method)

比我列表中最适合的方法和调用方法。

>> instance = Clas()

>> instance.hello()

'app'

我希望它打印hello而不是app。问题是什么? 此外,这些动态分配的方法中的每一个都在内存中引用相同的函数,即使我copy.copy(method)

1 个答案:

答案 0 :(得分:6)

您需要正确绑定i

for i in ['hello', 'world', 'app']:
    def method(i=i):
        print i
    setattr(self, i, method)

i变量然后变为method的本地变量。另一个选择是使用生成方法的新范围(单独的函数):

def method_factory(i):
    def method():
        print i
    return method 

for i in ['hello', 'world', 'app']:
    setattr(self, i, method_factory(i))