[英]Dynamically adding methods to a class in Python
我正在嘗試根據列表向類添加方法。
class _Roles(object):
"""
set the roles for dev, staging 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的最后一步,而不是為dev()
獲取dev等等。 這是什么原因?
因為您對所有函數聲明使用相同的作用域。 在單獨的作用域中定義每個函數。
只需使用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()
輸出 :
自我.v = 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.