Python - это динамический язык. Аргументы функции или метода полностью зависят от спецификации типа docstrings . То же самое относится и к типу возврата.
Например, это docstring
( или документация ) функции get
модуля requests
:
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)
Тип возврата указан в определении функции. Вы также можете указать тип аргументов для функций.
Однако метод find
класса Soup
записан так:
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
Редакторы могут искать find
методSoup
класс. Но они не знают, какой тип объекта возвращает этот метод.
Обходной путь должен указывать тип при назначении переменной:
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 и отлично документировали свой код. Надеюсь это поможет.