Circular dependency in Python
我有两个文件,
到今天为止,
1 | from node.py import * |
在
但是,到今天为止,我为
我在导入
我该怎么办?
导入python模块是一篇很好的文章,它解释了python中的循环导入。
解决此问题的最简单方法是将路径导入移动到节点模块的末尾。
另一种方法是只在您需要的函数中导入两个模块中的一个。当然,如果您只在一个或一小部分函数中需要它,那么这是最有效的:
1 2 3 4 5 6 7 8 9 10 11 | # in node.py from path import Path class Node ... # in path.py class Path def method_needs_node(): from node import Node n = Node() ... |
我更喜欢通过在另一个依赖类的构造函数中声明一个依赖项来打破循环依赖项。在我看来,这可以保持代码整洁,并且可以方便地访问所有需要依赖项的方法。
所以在我的例子中,我有一个客户服务和一个相互依赖的用户服务。我将循环依赖项分解如下:
1 2 3 4 5 6 7 8 9 10 | class UserService: def __init__(self): # Declared in constructor to avoid circular dependency from server.portal.services.admin.customer_service import CustomerService self.customer_service = CustomerService() def create_user(self, customer_id: int) -> User: # Now easy to access the dependency from any method customer = self.customer_service.get_by_id(customer_id) |
号