تحليل التبعية الدائرية في بايثون
في بايثون، من الممكن مواجهة تبعيات دائرية عندما تعتمد الوحدات على بعضها البعض في تعريفها. يوجد أحد هذه السيناريوهات عندما يقوم ملفان،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() ...
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3