1

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

代码:

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)

4

1 回答 1

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))
于 2013-03-25T14:47:22.980 回答