Ответ 1
Если вы не используете Cobra в определении класса Rat или наоборот (т.е. Используются только внутри методов), то вы можете фактически переместить оператор импорта в конец файла, к этому времени определение класса уже будет существовать.
Class Cobra:
...
def check_prey(self, rat ):
Some logic rat.foo()
import Rat
import Cobra
class Rat
...
def check_predator(self, snake ):
some_logic ..
snake.foo()
Или вы также можете ограничить объем импорта
Class Cobra:
...
def check_prey(self, rat ):
import Rat
Some logic rat.foo()
import Cobra
class Rat
...
def check_predator(self, snake ):
some_logic ..
snake.foo()
Если вы не используете имена классов Rat и Cobra напрямую, вам даже не нужны операторы import: пока свойства и функции существуют в экземплярах rat или snake, python не заботится, к какому классу они относятся. Вы из.
В общем, нет надежного способа избежать петель импорта. Лучшее, что вы можете сделать, - это рефакторинг вашего кода и выполнение некоторых вещей, которые я упомянул выше.