要问我非常具体的问题,我发现我需要一个相当长的介绍来激励和解释它--我保证在最后会有一个恰当的问题!
在读取大型Python代码库的一部分时,有时会遇到一些代码,其中参数所需的接口在同一模块或包中的“附近”代码中并不明显。例如:
def make_factory(schema):
entity = schema.get_entity()
...可能有许多代码处理的“模式”和“工厂”,"def get_entity()“也可能很常见(或者函数不调用模式上的任何方法,而只是将其传递给另一个函数)。因此,快速的grep并不总是有助于更多地了解什么是"schema“(返回类型也是如此)。虽然“鸭子类型”是Python的一个很好的特性,但有时读者头脑中关于“模式”传递的参数接口的不确定性妨碍了快速理解代码(对于实现接口的典型具体类的不确定性也是如此)。查看自动化测试可能会有所帮助,但显式文档可能会更好,因为阅读起来更快。任何这样的文档都是最好的,当它本身可以被测试,这样它就不会过时。
文档测试是解决这个问题的一种可能的方法,但这不是这个问题的意义所在。
Python 3具有“参数注释”功能( PEP 3107中定义的函数注释特性的一部分)。语言没有定义该特性的用途,但它可以用于此目的。看起来可能是这样:
def make_factory(schema: "xml_schema"):
...在这里,"xml_schema“标识了传递给该函数的参数应该支持的Python接口。在其他地方,会有用属性、方法及其参数签名等定义接口的代码,以及允许内省以验证特定对象是否提供接口的代码(可能是使用zope.interface /zope.schema之类的东西实现的)。请注意,这并不一定意味着每次传递参数时都会检查接口,也不一定意味着进行静态分析。相反,定义接口的目的是提供编写自动测试的方法,以验证这些文档是否过时(它们可能是相当通用的测试,这样您就不必为每个使用参数的函数编写新的测试,或者只在运行单元测试时打开运行时接口检查)。您可以进一步注释返回值的接口,我将不对此进行说明。
因此,问题是:
我想做到这一点,但是使用Python 2而不是Python3.Python 2没有函数注释特性。Python 2中“最接近的东西”是什么?显然,有不止一种方法可以做到这一点,但我怀疑有一种(相对地)明显的方法可以做到。
为额外的点:命名一个库,实现一个明显的方式。
发布于 2011-04-27 21:53:34
看看plac,它使用注释为脚本定义命令行接口。在Python2.x上,它使用装潢工。
发布于 2011-04-27 20:35:32
我相信,最接近的是一个名为PyAnno的注释库。
来自项目网页:
“Pyanno注释有两个功能:
https://stackoverflow.com/questions/5810063
复制相似问题