下面是示例代码。Python:为动态添加的函数获取适当的属性/函数名称
import inspect
from types import MethodType
class Settings(object):
APPS = ['s1', 's2', 's3']
def __init__(self):
Settings._setup_apps(self)
@classmethod
def _setup_apps(cls, instance):
def _setup(self, appname = None):
print "appname : ", appname
print "inspect : ", inspect.currentframe().f_code.co_name
for app in Settings.APPS:
new_attr_name = _setup.__name__[1:] + '_' + app
setattr(Settings, new_attr_name, _setup)
# setattr(instance, new_attr_name, MethodType(_setup, instance, type(instance)))
执行
s = Settings()
s.setup_s1()
结果
appname : None
inspect : _setup
我怎样才能获得应用程序名称 'S1' 是在功能 'setup_s1' 可用(类似 'S2' &“S3 '分别在setup_s2'&'setup_s3'中),而在调用时不显式传递'appname'。即
s.setup_s1('s1') # Do not prefer this
但是更新从“无”“应用程序名称”的默认值,以“S1” /“S2” /“S3”的创建属性“setup_s1”的期间/“setup_s2” /“setup_s3”是好。 (我不知道这是否可能)。
为什么你有你'_setup_apps'类方法里面的'_setup'方法? – 2014-10-11 10:35:05
为了将所有代码保存在一个地方,我做到了。你甚至可以在'Settings'类之外放置_setup函数,结果仍然是一样的。 – NEB 2014-10-11 10:39:52