परिचय
जावा के लिए, डिपेंडेंसी इंजेक्शन शुद्ध OOP के रूप में काम करता है, अर्थात आप कार्यान्वित होने के लिए एक इंटरफ़ेस प्रदान करते हैं और आपके फ्रेमवर्क कोड में एक वर्ग के उदाहरण को स्वीकार करते हैं जो परिभाषित इंटरफ़ेस को लागू करता है।
अब पाइथन के लिए, आप वैसे ही कर सकते हैं, लेकिन मुझे लगता है कि पाइथन के मामले में यह तरीका बहुत ज्यादा सही था। तो फिर आप इसे पायथोनिक तरीके से कैसे लागू करेंगे?
उदाहरण
कहो कि यह फ्रेमवर्क कोड है:
class FrameworkClass():
def __init__(self, ...):
...
def do_the_job(self, ...):
# some stuff
# depending on some external function
मूल दृष्टिकोण
सबसे भोली (और शायद सबसे अच्छा?) तरीका यह है कि बाहरी फ़ंक्शन को FrameworkClass
कंस्ट्रक्टर में आपूर्ति करने की आवश्यकता होती है , और फिर do_the_job
विधि से लागू किया जाता है ।
फ्रेमवर्क कोड:
class FrameworkClass():
def __init__(self, func):
self.func = func
def do_the_job(self, ...):
# some stuff
self.func(...)
क्लाइंट कोड:
def my_func():
# my implementation
framework_instance = FrameworkClass(my_func)
framework_instance.do_the_job(...)
सवाल
सवाल छोटा है। क्या ऐसा करने के लिए कोई बेहतर आमतौर पर इस्तेमाल किया जाने वाला पाइथोनिक तरीका है? या हो सकता है कि इस तरह की कार्यक्षमता का समर्थन करने वाले कोई पुस्तकालय?
अद्यतन: ठोस स्थिति
कल्पना कीजिए कि मैं एक माइक्रो वेब फ्रेमवर्क विकसित करता हूं, जो टोकन का उपयोग करके प्रमाणीकरण को संभालता है। इस ढांचे ID
को टोकन से प्राप्त कुछ की आपूर्ति करने और उपयोगकर्ता को उसी के अनुरूप प्राप्त करने के लिए एक फ़ंक्शन की आवश्यकता है ID
।
जाहिर है, फ्रेमवर्क उपयोगकर्ताओं या किसी अन्य एप्लिकेशन विशिष्ट तर्क के बारे में कुछ भी नहीं जानता है, इसलिए क्लाइंट कोड को प्रमाणीकरण कार्य करने के लिए उपयोगकर्ता गेट्टर कार्यक्षमता को फ्रेमवर्क में इंजेक्ट करना होगा।
AttributeError
याTypeError
अन्यथा उठाया जाता है), लेकिन अन्यथा यह समान है।