ভূমিকা
জাভা-র জন্য, নির্ভরতা ইনজেকশন খাঁটি ওওপি হিসাবে কাজ করে, অর্থাত্ আপনি কার্যকর করার জন্য একটি ইন্টারফেস সরবরাহ করেন এবং আপনার ফ্রেমওয়ার্ক কোডে সংজ্ঞায়িত ইন্টারফেস প্রয়োগ করে এমন একটি শ্রেণীর উদাহরণ গ্রহণ করুন।
পাইথনের জন্য এখন আপনি একইভাবে করতে সক্ষম, তবে আমি মনে করি পাইথনের ক্ষেত্রে সেই পদ্ধতিটি খুব বেশি ওভারহেড ছিল। তাহলে আপনি কীভাবে পাইথোনিক উপায়ে এটি প্রয়োগ করবেন?
ব্যবহারের ক্ষেত্রে
বলুন এটি ফ্রেমওয়ার্ক কোড:
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
, কিন্তু অন্যথায় এটা একই অন্যথায় উত্থাপিত পরার)।