Чтобы разделить большой класс на несколько файлов, этот ответ рекомендует использовать команду import
на уровне class
для загрузки методов, определения которых могут быть перемещены в другие модули. В качестве минимального примера:
class_def.py
:
class C:
from _methods import m
_methods.py
:
def m(self):
return "hello"
Обычно большинство IDE, в которых выполняется завершение кода функции, распознают функции, которые являются определены в некотором классе как связанные методы, и self
будет автоматически распознаваться как имеющий тип класса, в котором был определен метод. К сожалению, в приведенной выше ситуации я не определил m
внутри класса. Глядя только на _methods.py
, невозможно сказать, что self
должен иметь тип C
.
В определении m
, если я вставлю строку, начинающуюся с self.
, мой IDE не может предложить m
или любые другие методы, которые я мог бы реализовать в C
.
Очевидным решением было бы добавить подсказку типа:
from class_def import C
def m(self: C):
return "hello"
Но теперь у нас есть циклический импорт: определение C
импорт _methods
, но _methods
импорт C
. Как я могу создать подсказку типа, не вводя циклический импорт?
В настоящее время я использую Python 3.7, но меня также интересуют решения, требующие более поздних версий.