«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как решить проблемы циклической зависимости в Python?

Как решить проблемы циклической зависимости в Python?

Опубликовано 8 ноября 2024 г.
Просматривать:616

How to Resolve Circular Dependency Issues in Python?

Разрешение циклических зависимостей в Python

В Python можно столкнуться с циклическими зависимостями, когда модули полагаются друг на друга в своем определении. Один из таких сценариев возникает, когда два файла, node.py и path.py, определяют классы Node и Path соответственно, каждый из которых ссылается на другой.

Изначально path.py импортировал node.py для доступа к узлу. объект. Однако недавняя модификация представила в Node метод, который ссылается на объект Path. Это создало циклическую зависимость, что привело к исключению при импорте path.py.

Существует несколько подходов к разрешению циклических зависимостей:

1. Прямая ссылка:

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

from typing import ForwardRef

Node = ForwardRef("Node")

class Path:
    def method_needs_node(self, node: Node):
        ...

2. Отложенный импорт:

Импортируйте необходимый модуль только тогда, когда он необходим внутри функции. Это особенно удобно, когда зависимость требуется только для одной или нескольких функций:

# in node.py 
from path import Path
class Node 
    ...

# in path.py
class Path:
  def method_needs_node(): 
    from node import Node
    n = Node()
    ...
Заявление о выпуске Эта статья перепечатана по адресу: 1729326978. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3