Как разделить этот файл, несмотря на циклическую зависимость?
Вариант 1: разорвать циклы: поместить базовый класс в его собственный модуль, производные классы в дополнительные модули,и функции, работающие с этими производными классами в еще одном модуле.
Вариант 2: игнорировать циклы, импортировать только модули / пакеты в глобальное пространство имен, IE:
foo.py
class Bar:
"Frobs Quuxen"
Никогда не следует импортировать как from foo import Bar
, просто используйте import foo
и обращайтесь к foo.Bar
в необходимых функциях.