Python 如何在跨多个模块使用门面模式时避免循环依赖关系

Python 如何在跨多个模块使用门面模式时避免循环依赖关系,python,design-patterns,Python,Design Patterns,我试图实现一个门面模式来访问两种不同的文件类型,但我一直在运行循环依赖关系。这是常见的吗?如果是的话,标准的避免方法是什么 我在单独的模块中有两种文件类型(A和B),它们由另一个单独的interface.py模块中的facade访问。facade模块需要从每个模块导入文件类型类以返回对象,并且还实现了一个方法确定文件类型(路径)和一个自定义错误类不正确的文件类型 现在我想向FileTypeA添加一个add\u data\u from\u other\u file方法。它需要做的第一件事是确定它从

我试图实现一个门面模式来访问两种不同的文件类型,但我一直在运行循环依赖关系。这是常见的吗?如果是的话,标准的避免方法是什么

我在单独的模块中有两种文件类型(A和B),它们由另一个单独的
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,但如果需要在一个具体类中引发异常,这对我没有帮助。(在我的真实例子中,感觉可能会很混乱,但这可能是另一个问题!)

这感觉像是正面模式的经典用法,那么我在这里遗漏的明显技巧是什么呢