我几乎有我想要的......
此动态对象使用动态docstring生成封装通用函数调用:
def add_docs(tool):
def desc(func):
func.__doc__ = "Showing help for %s()" % tool
return func
return desc
class Dynamic(object):
def __getattr__(self, value):
@add_docs(value)
def mutable_f(*args, **kwargs):
print "Calling:", value
print "With arguments:", args, kwargs
return mutable_f
Run Code Online (Sandbox Code Playgroud)
它按预期工作:
>>> Dynamic().test(1, input='file')
Calling: test
With arguments: (1,) {'input': 'file'}
>>> Dynamic().test.__doc__
'Showing help for test()'
Run Code Online (Sandbox Code Playgroud)
唯一的两个问题是帮助显示mutable_f
签名
>>> help(Dynamic().test)
Help on function mutable_f in module __main__:
mutable_f(*args, **kwargs)
Showing help for test()
(END)
Run Code Online (Sandbox Code Playgroud)
并且没有自动完成(我可以在运行中获得有效函数列表,并缓存它,因为该操作很昂贵)
我认为第一个是无法解决的,但我对第二个不太确定.想法?