Прежде всего: я знаю, что уже есть много вопросов и ответов на тему кругового импорта.
Ответ более или менее: «Правильно спроектируйте структуру вашего модуля / класса, и вам не понадобится циклический импорт». Это правда. Я очень старался сделать правильный дизайн для моего текущего проекта, я думаю, что мне это удалось.
Но моя конкретная проблема заключается в следующем: мне нужна проверка типа в модуле, который уже импортирован модулем, содержащим класс для проверки. Но это выдает ошибку импорта.
Вот так:
foo.py:
from bar import Bar
class Foo(object):
def __init__(self):
self.__bar = Bar(self)
bar.py:
from foo import Foo
class Bar(object):
def __init__(self, arg_instance_of_foo):
if not isinstance(arg_instance_of_foo, Foo):
raise TypeError()
Решение 1: Если я изменил его, чтобы проверить тип путем сравнения строк, он будет работать. Но мне не очень нравится это решение (сравнение строк довольно дорого для простой проверки типов и может вызвать проблемы при рефакторинге).
bar_modified.py:
from foo import Foo
class Bar(object):
def __init__(self, arg_instance_of_foo):
if not arg_instance_of_foo.__class__.__name__ == "Foo":
raise TypeError()
Решение 2: Я также мог бы упаковать два класса в один модуль. Но в моем проекте много разных классов, таких как пример "Bar", и я хочу разделить их на разные файлы модулей.
После моих собственных 2-х решений для меня нет выбора: есть ли у кого-нибудь более подходящее решение для этой проблемы?