Jedi-Python自动补全(提示),不显示方法或建议



我目前正在制作Sublime Text 3使用Jedi-Python自动补全,它可以处理最基本的东西。然而,我使用它就像在这种情况下使用BeautifulSoup4

main问题是在文件上执行多个点(.(方法时无法正确显示补全,补全器必须像.find_all方法一样首先看到它,然后才会建议它(但这似乎是Sublime Text 3本身的自动补全(。

下一种情况下会发生什么

import requests
from bs4 import BeautifulSoup as Soup # works ok, shows all suggestions
request = requests.get('http://example.com')    
soup = Soup(request.text, 'lxml')

main = soup.find('body') # shows find method 
# However, No available completions in the next case
second_lookup = main.find('div') # doesn't show any autocompletions/hints when starting w/ .fi..

在寻找任何其他"更深层次"的自动完成方法时也是如此。到目前为止,我已经试过调整绝地武士中的所有设置。。设置文件。这没有帮助,我尝试过使用Anaconda,因为它还有一些额外的工具,包括绝地武士。

这似乎是特定于某些库的,例如numpybs4

注:

并非特定于Sublime Text 3。Atom和类似的IDE也是如此。

Python是一种动态语言。函数或方法的参数完全依赖于文档字符串的类型规范。退货类型也是如此。

例如,这是requests模块的get函数的docstring(或文档(:

def get(url, params=None, **kwargs):
r"""Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the query string for the :class:`Request`.
:param **kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
"""
kwargs.setdefault('allow_redirects', True)
return request('get', url, params=params, **kwargs)

函数定义中指定了返回类型。还可以指定函数的参数类型。

然而,Soup类的find方法是这样写的:

def find(self, name=None, attrs={}, recursive=True, text=None,
**kwargs):
"""Return only the first child of this Tag matching the given
criteria."""
r = None
l = self.find_all(name, attrs, recursive, text, 1, **kwargs)
if l:
r = l[0]
return r

编辑器可以查找Soup类的find方法。但是,他们不知道这个方法返回什么类型的对象。


解决方法是在分配给变量时指定类型:

import requests
from bs4 import Tag
from bs4 import BeautifulSoup as Soup
request = requests.get('http://example.com')
soup = Soup(request.text, 'lxml')
main: Tag  = soup.find('body')
# Auto completion works.
second_lookup = main.find('div')

也可以将:rtype: Tag添加到find文档字符串中。我知道它返回Tag对象,因为type(main)type(second_lookup)都返回<class 'bs4.element.Tag'>

我提供的链接足以让你了解python中的静态类型,并完美地记录你的代码。希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新