Если вы не используете 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 напрямую, вы даже не сможетевообще нужны операторы импорта: пока свойства и функции существуют в экземплярах крысы или змеи, python не имеет значения, из какого они класса.
В общем, не существует надежного способа избежатьимпортные петли.Лучшее, что вы можете сделать, - это рефакторинг вашего кода и выполнение некоторых вещей, о которых я говорил выше.