首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何记录和测试Python 2中形式参数所需的接口?

如何记录和测试Python 2中形式参数所需的接口?
EN

Stack Overflow用户
提问于 2011-04-27 20:21:00
回答 2查看 318关注 0票数 3

要问我非常具体的问题,我发现我需要一个相当长的介绍来激励和解释它--我保证在最后会有一个恰当的问题!

在读取大型Python代码库的一部分时,有时会遇到一些代码,其中参数所需的接口在同一模块或包中的“附近”代码中并不明显。例如:

代码语言:javascript
复制
def make_factory(schema):
    entity = schema.get_entity()
    ...

可能有许多代码处理的“模式”和“工厂”,"def get_entity()“也可能很常见(或者函数不调用模式上的任何方法,而只是将其传递给另一个函数)。因此,快速的grep并不总是有助于更多地了解什么是"schema“(返回类型也是如此)。虽然“鸭子类型”是Python的一个很好的特性,但有时读者头脑中关于“模式”传递的参数接口的不确定性妨碍了快速理解代码(对于实现接口的典型具体类的不确定性也是如此)。查看自动化测试可能会有所帮助,但显式文档可能会更好,因为阅读起来更快。任何这样的文档都是最好的,当它本身可以被测试,这样它就不会过时。

文档测试是解决这个问题的一种可能的方法,但这不是这个问题的意义所在。

Python 3具有“参数注释”功能( PEP 3107中定义的函数注释特性的一部分)。语言没有定义该特性的用途,但它可以用于此目的。看起来可能是这样:

代码语言:javascript
复制
def make_factory(schema: "xml_schema"):
    ...

在这里,"xml_schema“标识了传递给该函数的参数应该支持的Python接口。在其他地方,会有用属性、方法及其参数签名等定义接口的代码,以及允许内省以验证特定对象是否提供接口的代码(可能是使用zope.interface /zope.schema之类的东西实现的)。请注意,这并不一定意味着每次传递参数时都会检查接口,也不一定意味着进行静态分析。相反,定义接口的目的是提供编写自动测试的方法,以验证这些文档是否过时(它们可能是相当通用的测试,这样您就不必为每个使用参数的函数编写新的测试,或者只在运行单元测试时打开运行时接口检查)。您可以进一步注释返回值的接口,我将不对此进行说明。

因此,问题是:

我想做到这一点,但是使用Python 2而不是Python3.Python 2没有函数注释特性。Python 2中“最接近的东西”是什么?显然,有不止一种方法可以做到这一点,但我怀疑有一种(相对地)明显的方法可以做到。

为额外的点:命名一个库,实现一个明显的方式。

EN

回答 2

Stack Overflow用户

发布于 2011-04-27 21:53:34

看看plac,它使用注释为脚本定义命令行接口。在Python2.x上,它使用装潢工

票数 1
EN

Stack Overflow用户

发布于 2011-04-27 20:35:32

我相信,最接近的是一个名为PyAnno的注释库。

来自项目网页:

“Pyanno注释有两个功能:

  • 提供结构化的方式来记录Python代码
  • 执行有限的运行时检查“
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5810063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档