चक्रीय आयात के बिना पायथन में संकेत टाइप करें
एक बड़े वर्ग को दो छोटे वर्गों में विभाजित करने के प्रयास में, आपको चक्रीय की समस्या का सामना करना पड़ता है आयात. "मुख्य" वर्ग मिक्सिन वर्ग को आयात करता है, और मिक्सिन वर्ग अपने प्रकार के संकेत में "मुख्य" वर्ग को संदर्भित करता है। इसके परिणामस्वरूप एक आयात चक्र उत्पन्न होता है, जो प्रकार संकेत को ठीक से काम करने से रोकता है।
इसे हल करने के लिए, आप निम्नलिखित दृष्टिकोण पर विचार कर सकते हैं:
# main.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any
if TYPE_CHECKING:
from mixin import MyMixin
class Main(object):
def func1(self, xxx: Any):
...
# mixin.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any
if TYPE_CHECKING:
from main import Main
class MyMixin(object):
def func2(self: Main, xxx: Any):
...
इस उदाहरण में, पायथन के TYPE_CHECKING स्थिरांक का उपयोग "मुख्य" वर्ग को सशर्त रूप से आयात करने के लिए किया जाता है। कोड चलाते समय, स्थिरांक गलत होने के कारण आयात विवरण छोड़ दिया जाता है। हालाँकि, mypy जैसे टाइप-चेकिंग टूल if TYPE_CHECKING ब्लॉक के भीतर कोड की व्याख्या करते हैं और func2 के लिए टाइप एनोटेशन को पहचानते हैं।
एक अन्य दृष्टिकोण में फॉरवर्ड रेफरेंस का उपयोग करना शामिल है:
# mixin.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any
if TYPE_CHECKING:
from main import Main
class MyMixin(object):
def func2(self, xxx: 'Main'):
...
यहां, func2 के लिए टाइप एनोटेशन एक स्ट्रिंग है जो उस वर्ग के नाम का प्रतिनिधित्व करता है जिसे बाद में आयात किया जाएगा। दोनों दृष्टिकोणों को टाइप संकेतों के साथ प्रभावी ढंग से काम करने के लिए पायथन 3.7 या उच्चतर के उपयोग की आवश्यकता होती है।
याद रखें कि मिक्सिन और टाइप हिंटिंग का उपयोग करने के लिए आपके कोड में अतिरिक्त संरचना की आवश्यकता हो सकती है। उदाहरण के लिए, mypy एक सार बेस क्लास (एबीसी) बनाने की अनुशंसा करता है जो आपके "मुख्य" और मिक्सिन दोनों वर्गों को विरासत में मिलता है। इससे टाइप चेकिंग की सटीकता में सुधार हो सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3