gpt4 book ai didi

python - 如何记录和测试 Python 2 中形式参数所需的接口(interface)?

转载 作者:行者123 更新时间:2023-11-28 18:54:28 24 4
gpt4 key购买 nike

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

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

def make_factory(schema):
entity = schema.get_entity()
...

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

Doctests 是解决这个问题的一种可能方法,但这不是这个问题的目的。

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

def make_factory(schema: "xml_schema"):
...

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

所以,问题:

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

额外的要点:命名一个实现了一种明显方式的库。

最佳答案

看看plac它使用注释为脚本定义命令行界面。在 Python 2.x 上它使用 plac.annotations() decorator .

关于python - 如何记录和测试 Python 2 中形式参数所需的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com