我正在尝试根据列表向类添加方法。
class _Roles(object):
"""
set the roles for dev, stagging and production
"""
def __init__(self):
from types import MethodType
steps = ['dev','stage','prod']
for step in steps:
def env_setter(self):
print step
method = MethodType(env_setter,self,self.__class__)
setattr(self,step,method)
问题在于,当我致电_Roles.dev()
,_Roles.stage()
或_Roles.prod()
时,我总是打印出 prod 的最后一步,而不是 {/ 1}}的开发等等。这是什么原因?
答案 0 :(得分:2)
因为you use the same scope for all function declarations。在单独的范围内定义每个函数。
答案 1 :(得分:1)
只需使用 setattr
:
class Foo:
def __init__(self, v):
self.v = v
def my_new_method(self):
print("self.v =", self.v)
setattr(Foo, 'print_v', my_new_method)
Foo(5).print_v()
输出:
<块引用>self.v = 5