首先:我知道关于循环进口的话题已经有很多问题和答案了。
答案或多或少是:“正确设计您的模块/类结构,您将不需要循环导入”。那是真实的。我非常努力地为我当前的项目做出合适的设计,我认为我成功了。
但我的具体问题如下:我需要在一个模块中进行类型检查,该模块已经由包含要检查的类的模块导入。但这会引发导入错误。
像这样:
foo.py:
from bar import Bar
class Foo(object):
def __init__(self):
self.__bar = Bar(self)
酒吧.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 个解决方案对我来说没有选择之后:有没有人对这个问题有更好的解决方案?