Круговая зависимость в Python

У меня есть два файла, node.py и path.py, которые определяют два класса, Node и Path, соответственно.

До сегодня, определение для Path ссылаемый Node объект, и поэтому я сделал

from node.py import *

в path.py файл.

Однако с сегодняшнего дня я создал новый метод для Node это ссылается Path объект.

У меня были проблемы при попытке импортировать path.py: Я попробовал его, и когда программа работала и звонила Path метод, который использует Node, исключение повысилось о Node не быть определенным.

Что я делаю?

59
задан 22 May 2009 в 00:08

1 ответ

Я предпочитаю повреждать круговую зависимость путем объявления одной из зависимостей в конструкторе другого зависимого класса. По моему мнению, это сохраняет код более опрятным, и предоставляет легкий доступ ко всем методам, кто требует зависимости.

Так в моем случае у меня есть CustomerService и UserService, которые зависят друг от друга. Я повреждаю круговую зависимость следующим образом:

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)
1
ответ дан 1 November 2019 в 11:59

Другие вопросы по тегам:

Похожие вопросы: