В Python 3.7.2 у меня есть два класса, которые ссылаются друг на друга.
Я посмотрел на вопрос и ответы в: Круговой (или циклический) импорт в Python
и они не отвечают на вопрос о том, как сохранить возможности подсказки типов и автозаполнения при циклическом импорте. Чтобы позволить Pycharm автоматически завершать код, я задаю этот вопрос.
Класс # 1 представляет сервер ElasticSearch и импортирует класс № 2 в качестве его члена, чтобы предоставить его в качестве возможностей внутреннего поиска.
Класс # 2 представляет группу шаблонов поиска JSON и импортирует класс # 1, чтобы определить тип экземпляра, который он получает из класса # 1. Это позволяет классу № 2 запускать методы GET \ POST, определенные в классе № 1.
Это выглядит примерно так:
класс SimplifiedElasticSearch
from framework.elk.search_patterns import SearchPatterns
class SimplifiedElasticSearch(object):
...
...
класс SearchPatterns
from framework.elk.simplified_elastic_search import SimplifiedElasticSearch
class SearchPatterns(object):
def __init__(self, es_server: SimplifiedElasticSearch):
...
...
Вы можете видеть, что оба модуля импортируют друг друга, и экземпляр класса SimplifiedElasticSearch передается в класс SearchPatterns после __ init __
Это приводит к ошибке импорта
ImportError: cannot import name 'SimplifiedElasticSearch' from 'framework.elk.simplified_elastic_search'
Чтобы предотвратить ошибку, можно НЕ импортировать класс SimplifiedElasticSearch, т.е. удалить строку
from framework.elk.simplified_elastic_search import SimplifiedElasticSearch
и написать код с автозаполнением и подсказкой типа для экземпляра SimplifiedElasticSearch, который я передаю классу SearchPatterns
Как сохранить автозаполнение и подсказку типа для такого случая?