我想动态地在类__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)
答案 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))