告诉pylint方法的返回类型是什么

时间:2017-12-27 08:07:17

标签: python pylint

提供详细信息:这是一个受限制的环境,包含Python 2.7.14,Pylint 1.8.1和Astroid 1.6.0以及其他各种模块,但我无法轻松安装新模块,例如{{1} (甚至不用virtualenv)或对代码库进行重大更改。

由于https://github.com/PyCQA/pylint/issues/400我在某些代码中遇到了pylint错误。我以一种hacky方式解决了这个问题(通过删除wait()方法的整数参数),现在我没有得到错误,但没有进行检查(pylint无法确定)什么类型的变量都是。)

我真正想做的是告诉pylint返回类型是什么。我已经尝试阅读Astroid文档,仔细阅读各种astroid / brains文件,并查看其他SO问题和答案,例如Set multiple inferred types based on arguments for pylint pluginpylint, coroutines, decorators and type inferencing,但我想我不是在做了。我添加了自己的mypy,我知道它在pylint期间被加载(因为它最初有语法错误:))。但我不确定它需要做什么。

假设我有这段代码:

load-plugins

class Peer(object): def get_domain(self): return "foo" class TestListener(object): def __init__(self): self._latest = None def get(self, timeout): # tricks here return self._latest def peer_joined(self, peer): self._latest = peer peer = TestListener().get(3) print(peer.get_domain()) print(peer.get_foo()) 期间,我们正在等待# tricks here,在此期间另一个线程将调用threading.Event()并传递peer_joined()类型的对象,但是pylint不会grok this。

我想要做的是注释Peer()方法告诉pylint它将返回一个TestListener.get()对象,以便pylint在第二次打印调用中捕获错误。 / p>

我已经尝试了这一点,但很明显我错过了一些基本的东西,因为看起来我的变换方法甚至从未被调用过(如果我把伪造的方法调用那里没有打印错误):

Peer

2 个答案:

答案 0 :(得分:0)

$url = Storage::url('/test/image.jpg');

这是一种用于编写python docstring的reStructuredText格式(一种在函数定义之后出现的多行字符串)。 您可以记录所有参数类型,以及函数返回的数据类型。

pylint可以解析该docstring以找出该函数返回值的数据类型。

此stackoverflow答案有更全面的解释 What is the standard Python docstring format?

答案 1 :(得分:0)

有一点需要提及的是,pylint目前的类型检查功能有限,如mypy中所见。它更依赖于推断没有类型提示的值和类型,尽管意图是在某些时候支持PEP-484打字。

现在关于这个问题,我看到你正在使用模块扩展器,而实际上你应该使用类转换,如:

astroid.MANAGER.register_transform(astroid.ClassDef,  _class_transform,
                                   optional_transform_predicate)
相关问题