首页 / PYTHON / python-动态函数文档字符串
python-动态函数文档字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-动态函数文档字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1923字,纯文字阅读大概需要3分钟。
内容图文
![python-动态函数文档字符串](/upload/InfoBanner/zyjiaocheng/694/913f8f29de5f412da6e4c9433611adb3.jpg)
我想编写一个具有动态创建的文档字符串的python函数.从本质上讲,对于函数func(),我希望func .__ doc__是一个描述符,该描述符调用自定义__get__函数以根据需要创建文档字符串.然后help(func)应该返回动态生成的文档字符串.
这里的上下文是编写一个python包,在现有的分析包中包含大量命令行工具.每个工具都变成了一个类似命名的模块函数(通过函数工厂创建并插入到模块名称空间中),其中函数文档和接口参数是通过分析包动态生成的.
解决方法:
您无法以自己想做的方式去做自己想做的事情.
从您的描述看来,您可以执行以下操作:
for tool in find_tools():
def __tool(*arg):
validate_args(tool, args)
return execute_tool(tool, args)
__tool.__name__ = tool.name
__tool.__doc__ = compile_docstring(tool)
setattr(module, tool.name, __tool)
即在创建函数时动态地预先创建文档字符串.
从一个对__doc__的调用到下一个调用,该docstring必须是动态的,这是原因吗?
假设有,您将必须使用__call__触发操作将函数包装在一个类中.
但是即使那样,您仍然有问题.当调用help()查找文档字符串时,它是在类而不是实例上调用的,所以这种事情:
class ToolWrapper(object):
def __init__(self, tool):
self.tool = tool
self.__name__ = tool.name
def _get_doc(self):
return compile_docstring(self.tool)
__doc__ = property(_get_doc)
def __call__(self, *args):
validate_args(args)
return execute_tool(tool, args)
将不起作用,因为属性是实例,而不是类属性.您可以通过将文档属性放在元类而不是类本身上来使其工作
for tool in find_tools():
# Build a custom meta-class to provide __doc__.
class _ToolMetaclass(type):
def _get_doc(self):
return create_docstring(tool)
__doc__ = property(_get_doc)
# Build a callable class to wrap the tool.
class _ToolWrapper(object):
__metaclass__ = _ToolMetaclass
def _get_doc(self):
return create_docstring(tool)
__doc__ = property(_get_doc)
def __call__(self, *args):
validate_args(tool, args)
execute_tool(tool, args)
# Add the tool to the module.
setattr(module, tool.name, _ToolWrapper())
现在你可以做
help(my_tool_name)
并获取自定义文档字符串,或者
my_tool_name.__doc__
对于同一件事. __Tool__属性位于_ToolWrapper类中,以捕获后一种情况.
内容总结
以上是互联网集市为您收集整理的python-动态函数文档字符串全部内容,希望文章能够帮你解决python-动态函数文档字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。