下面是示例代碼。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