"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حل مشكلات التبعية الدائرية في بايثون؟

كيفية حل مشكلات التبعية الدائرية في بايثون؟

تم النشر بتاريخ 2024-11-08
تصفح:523

How to Resolve Circular Dependency Issues in Python?

تحليل التبعية الدائرية في بايثون

في بايثون، من الممكن مواجهة تبعيات دائرية عندما تعتمد الوحدات على بعضها البعض في تعريفها. يوجد أحد هذه السيناريوهات عندما يقوم ملفان،node.py وpath.py، بتحديد فئتي Node وPath، على التوالي، حيث يشير كل منهما إلى الآخر.

في البداية، قام path.py باستيراد Node.py للوصول إلى Node. هدف. ومع ذلك، قدم تعديل حديث طريقة في العقدة تشير إلى كائن المسار. أدى هذا إلى إنشاء تبعية دائرية، مما أدى إلى حدوث استثناء أثناء استيراد path.py.

هناك عدة طرق لحل التبعيات الدائرية:

1. المرجع الأمامي:

استخدم مرجعًا أماميًا في إحدى الوحدات النمطية للإعلان عن اسم فئة الوحدة الأخرى دون الحاجة إلى استيرادها. في هذه الحالة، سيعلن path.py عن فئة العقدة بمرجع أمامي:

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