Python 如何在跨多个模块使用门面模式时避免循环依赖关系
我试图实现一个门面模式来访问两种不同的文件类型,但我一直在运行循环依赖关系。这是常见的吗?如果是的话,标准的避免方法是什么 我在单独的模块中有两种文件类型(A和B),它们由另一个单独的Python 如何在跨多个模块使用门面模式时避免循环依赖关系,python,design-patterns,Python,Design Patterns,我试图实现一个门面模式来访问两种不同的文件类型,但我一直在运行循环依赖关系。这是常见的吗?如果是的话,标准的避免方法是什么 我在单独的模块中有两种文件类型(A和B),它们由另一个单独的interface.py模块中的facade访问。facade模块需要从每个模块导入文件类型类以返回对象,并且还实现了一个方法确定文件类型(路径)和一个自定义错误类不正确的文件类型 现在我想向FileTypeA添加一个add\u data\u from\u other\u file方法。它需要做的第一件事是确定它从
interface.py
模块中的facade访问。facade模块需要从每个模块导入文件类型类以返回对象,并且还实现了一个方法确定文件类型(路径)
和一个自定义错误类不正确的文件类型
现在我想向FileTypeA添加一个add\u data\u from\u other\u file
方法。它需要做的第一件事是确定它从什么类型的文件添加数据,但它无法访问接口。在不创建循环依赖项的情况下,确定\u file\u type
方法。出于同样的原因,我也无法从文件类型\u a,b
模块中引发不正确的文件类型
错误
## Module: interface.py
from file_type_a import FileTypeA
from file_type_b import FileTypeB
def get_file(path):
if determine_type(path) == "typeA":
return FileTypeA(path)
elif determine_type(path) == "typeB":
return FileTypeB(path)
def determine_file_type(path):
...
return file_type
class IncorrectFileTypeError(ValueError):
pass
## Module: file_type_a.py
class FileTypeA():
def add_data_from_another_file(self, path):
file_type = determine_file_type(path) ### CAN'T IMPORT THIS
if file_type == "typeB":
raise IncorrectFileTypeError() ### CAN'T IMPORT THIS
## Module: file_type_b.py
class FileTypeB():
pass
一种解决方案是在AbstractFileType
类上实现determinate\u file\u type
作为staticmethod,但如果需要在一个具体类中引发异常,这对我没有帮助。(在我的真实例子中,感觉可能会很混乱,但这可能是另一个问题!)
这感觉像是正面模式的经典用法,那么我在这里遗漏的明显技巧是什么呢