我目前正在制作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,因为它还有一些额外的工具,包括绝地武士。
这似乎是特定于某些库的,例如numpy和bs4。
注:
此并非特定于Sublime Text 3。Atom和类似的IDE也是如此。
例如,这是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中的静态类型,并完美地记录你的代码。希望这能有所帮助。