我想编写一个具有动态创建的文档字符串的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__
吗?
假设有,您必须将函数包装在一个类中,然后使用它__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__
对于同一件事。该__doc__
属性在_ToolWrapper
类中是需要捕获后一种情况的。
我希望将动态字段存储到文档中,但每个文档可以有不同的字段。 例如: 如果我运行上述程序,mongodb文档如下所示。 但我想要的是字段名称应该是“field1”而不是这样的“df”。 这只是一个示例代码,所以我知道df值是什么,但实际上我不知道df值是什么。那么在存储时动态命名字段的方法是什么? 在Mongoengine中有一个类似的使用key作为值的问题,但是解决方案建议使用DictField(
问题内容: 获取XML文档()的String表示的最简单方法是什么?那就是所有节点都将在一行上。 例如,从 (这只是一个树表示形式,在我的代码中它是一个对象,因此我不能将其视为字符串) 至 谢谢! 问题答案: 假设您的实例是:
这些函数在字符数组类(numpy.char)中定义。 较旧的 Numarray 包包含chararray类。 numpy.char类中的上述函数在执行向量化字符串操作时非常有用。 函数执行按元素的字符串连接。 输出如下: 连接两个字符串: ['hello xyz'] 连接示例: ['hello abc' 'hi xyz'] numpy.char.multiply() 这个函数执行多重连接。 imp
字符串函数简介 字符串函数主要用于字符串的转码、替换、格式化等方面,可以帮助我们快速简便的处理字符串。 3.1 escape 函数 函数用途: 将URL编码应用于在输入字符串中找到的特殊字符。 tips: 以下这些字符不会参与编码:, , / , ? , @ , & , + , ' , ~ , ! , $ 常见的编码字符: <space> , # , ^ , ( , ) , { , } , | ,
Vim有许多内置(built-in)函数来操作字符串。本章中我们将介绍一些最为重要的字符串函数。 长度 第一个介绍的函数是strlen。执行下面的命令: :::vim :echom strlen("foo") Vim显示3,也即"foo"的长度。现在尝试下面的命令: :::vim :echom len("foo") Vim再一次显示3。对于字符串,len和strlen有同样的效果。在本书稍后的
问题内容: {用户名:’我’,公司:{“您的公司”:{…}} 我想在用户记录(用户集合)中插入公司,以便: {username:’me’,companies:{“ yourcompany”:{…},“ mycompany”:{…}} 但是这个名字是动态的。 为此。.{username:’me’,companies:{“ yourcompany”:{…},“ companyid”:{…}} 我该怎么