`__import__()` ফাংশন কি?
পাইথনের বিল্ট-ইন `__import__()` ফাংশনটি রানটাইমে ডাইনামিকভাবে মডিউল ইমপোর্ট করতে ব্যবহৃত হয়। সাধারণত import স্টেটমেন্ট কম্পাইল-টাইমে কাজ করে, কিন্তু `__import__()` ফাংশন কল করেই ডাইনামিকভাবে মডিউল লোড করা যায়।
সিনট্যাক্স
__import__(name, globals=None, locals=None, fromlist=(), level=0)
- name: মডিউল নাম (স্ট্রিং)।
- globals/locals: নাম রেজোলিউশনের কনটেক্সট।
- fromlist: সাবমডিউল বা অবজেক্ট লিস্ট যা ইমপোর্ট হবে।
- level: ০ = অ্যাবসোলিউট ইমপোর্ট, >০ = রিলেটিভ ইমপোর্ট।
উদাহরণ: datetime মডিউল ডাইনামিক ইমপোর্ট
# রানটাইমে datetime ইমপোর্ট
dttime = __import__('datetime', globals(), locals(), [], 0)
print(dttime.datetime.now()) # 2021-01-12 07:38:54.903330
# কপি করে কাস্টম ফরম্যাটিং
x = dttime.datetime.now()
print(x.strftime("%d-%B")) # 12-January
আউটপুট
2021-01-12 07:38:54.903330
12-January
কেন `__import__()` ব্যবহার করা উচিত নয় (Discouraged)
- পাঠযোগ্যতা:
import moduleবাfrom module import nameবেশি পঠনীয়। - পারফরম্যান্স: টপ-লেভেল ইমপোর্ট ক্যাশে হয়, রানটাইম ইমপোর্ট স্লো।
- স্ট্যাটিক অ্যানালাইসিস: লিন্টার, IDE, টাইপ চেকার ডাইনামিক ইমপোর্ট ট্র্যাক করতে পারে না।
- নেমস্পেস পলিউশন: অপ্রত্যাশিত গ্লোবাল নেমস্পেস পরিবর্তন।
বিকল্প: `importlib.import_module()` (সুপারিশ করা)
import importlib
# ডাইনামিক ইমপোর্ট (আধুনিক API)
mod = importlib.import_module('datetime')
print(mod.datetime.now())
# সাবমডিউল
json_mod = importlib.import_module('json')
print(json_mod.dumps({'a': 1}))
উপযোগী কেস
- প্লাগইন সিস্টেম (প্লাগইন নাম কনফিগ থেকে পাওয়া যায়)।
- অপশনাল ডিপেন্ডেন্সি (মডিউল আছে কিনা চেক করে লোড)।
- হট রিলোডিং / ডেভেলপমেন্ট টুলস।
সারসংক্ষেপ: `__import__()` জানা ভালো, কিন্তু প্রোডাকশন কোডে importlib.import_module() বা স্ট্যাটিক ইমপোর্ট ব্যবহার করুন।