এটি সত্যিই কেবল ব্যক্তিগত পছন্দ এবং এটি আপনার পাইথন মডিউলগুলির বিন্যাসের সাথে করতে হবে।
ধরা যাক আপনার কাছে একটি মডিউল আছে erikutils
। দুটি উপায়ে এটি একটি মডিউল যা দরকার তা যদি হয় আপনি একটি ফাইল নামের erikutils.py আপনার এর উপর sys.path
অথবা আপনি একটি তালিকা নামের erikutils আপনার এর উপর sys.path
একটি খালি সঙ্গে __init__.py
এটা ভিতরে ফাইল। তারপর ধরুন আপনাকে বলা মডিউল একটি গুচ্ছ দাও fileutils
, procutils
, parseutils
এবং আপনাকে সেই অধীনে উপ-মডিউল হতে চান erikutils
। সুতরাং আপনি fileutils.py , procutils.py , এবং parseutils.py নামে কিছু .py ফাইল তৈরি করেন :
erikutils
__init__.py
fileutils.py
procutils.py
parseutils.py
হতে পারে আপনি কয়েক ফাংশন যে শুধু নাগরিক নয় আছে fileutils
, procutils
অথবা parseutils
মডিউল। এবং আসুন আমরা আপনাকে একটি নতুন মডিউল নামে পরিচিত বলে মনে করেন না miscutils
। এবং, আপনি ফাংশনটি এভাবে কল করতে সক্ষম হতে চাই:
erikutils.foo()
erikutils.bar()
না করে বরং
erikutils.miscutils.foo()
erikutils.miscutils.bar()
সুতরাং erikutils
মডিউলটি একটি ডিরেক্টরি নয়, একটি ফাইল নয়, আমাদের __init__.py
ফাইলটির ভিতরে এটির কার্যকারিতা নির্ধারণ করতে হবে ।
জাঙ্গোতে, আমি সবচেয়ে ভাল উদাহরণটি ভাবতে পারি django.db.models.fields
। সমস্ত জাজানো * ফিল্ড ক্লাসগুলি ডিজেঙ্গো / ডিবি / মডেল / ক্ষেত্র ডিরেক্টরিতে __init__.py
ফাইলটিতে সংজ্ঞায়িত করা হয়েছে । আমি অনুমান করি তারা এগুলি করেছে কারণ তারা সমস্ত কিছুকে অনুমানীয় জ্যাঙ্গো / ডিবি / মডেল / ফিল্ডসপিপি মডেল হিসাবে ছড়িয়ে দিতে চান না , তাই তারা এটিকে কয়েকটি সাবমোডিয়ালে বিভক্ত করেছেন ( সম্পর্কিত.পি , ফাইলসপি , উদাহরণস্বরূপ) এবং তারা ক্ষেত্রের মডিউলে নিজেই তৈরি * ক্ষেত্রের সংজ্ঞা আটকে রেখেছিল (তাই, )।__init__.py