ساخت ماژول در پایتون – آموزش ایجاد ماژول به زبان ساده


برنامهنویسی ماژولار، رویکردی برای طراحی نرمافزار است که با استفاده از آن، میتوان اجزای یک برنامه را به بخشهای کوچکتر تقسیم کرد. به هر یک از این بخشهای کوچکتر برنامه، ماژول گفته میشود. با استفاده از این رویکرد برنامهنویسی، میتوان ماژولها را به صورت جداگانه ایجاد کرد و آنها را به طور مستقل مورد بررسی و آزمایش قرار داد. همچنین، از ماژولهای ساخته شده میتوان در سایر پروژههای برنامهنویسی استفاده کرد. زبان برنامهنویسی پایتون به عنوان یکی از زبانهای برنامهنویسی شئگرا، از برنامهنویسی ماژولار پشتیبانی میکند. در مقاله حاضر سعی شده است تا حد امکان بهطور جامع به نحوه ساخت ماژول در پایتون پرداخته و شیوههای مختلف فراخوانی ماژولها در پایتون به همراه مثال شرح داده شوند.
ماژول چیست ؟
برنامههای کامپیوتری میتوانند از بخشهای متعدد و جداگانهای تشکیل شوند که به هر یک از این بخشها، ماژول گفته میشود؛ به عبارتی، عملیات مختلف یک برنامه کامپیوتری را میتوان با استفاده از ماژولهای جداگانه تعریف کرد.
با تخصیص دادن نامهای منحصربفرد به کدهای ماژولار شده، میتوان به دفعات از آنها در برنامه استفاده کرد؛ به عبارت دیگر، زمانی که نیاز است از قطعه کدی چندین بار در برنامه فعلی خود یا در سایر پروژههای برنامهنویسی استفاده شود، تنها باید نام ماژول مورد نظر را در برنامه فراخوانی کرد. بدین ترتیب، با استفاده از این روش میتوان از نوشتن کدهای تکراری در برنامه جلوگیری کرد.
برنامهنویسی ماژولار خوانایی و کارایی برنامه را افزایش میدهد و به تسریع نوشتن برنامه کامپیوتری و تست آن کمک میکند. بهعلاوه، چنین رویکردی در کدنویسی به برنامهنویس این امکان را میدهد که تنها بر بخش خاصی از برنامه تمرکز داشته باشد. در ادامه، به توضیح انواع ماژول و نحوه ساخت ماژول در پایتون پرداخته میشود.
انواع ماژول در پایتون کدامند ؟
زبان برنامهنویسی پایتون یکی از زبانهای برنامهنویسی شئگرا محسوب میشود که از رویکرد برنامهنویسی ماژولار پشتیبانی میکند؛ به عبارتی، میتوان از کدهایی که به صورت مکرر در پروژههای مختلف برنامهنویسی به کار میروند، در قالب توابع مستقل یا متد کلاس استفاده کرد.
برای ساخت ماژول در پایتون، میتوان از فایلی با پسوند py. استفاده کرد؛ به عبارتی، هر فایلی با پسوند py. در پایتون، ماژول تلقی میشود. ماژولهای پایتون را میتوان به دو دسته تقسیمبندی کرد:
- «ماژولهای توکار» (Built-in Modules): ماژولهای توکار، ماژولهای از پیش تعریف شدهای هستند که میتوان از طریق «کتابخانه استاندارد پایتون» (Python Standard Library) به آنها دسترسی داشت. با دستورpip میتوان ماژولهای توکار را برروی سیستم نصب و در پروژههای مختلف برنامهنویسی از آنها استفاده کرد. دستورpipمدیریت «بستههای» (Packages) پایتون را برعهده دارد و امکان نصب ماژولها و بستههای موجود در کتابخانه پایتون را فراهم میکند.
- «ماژولهای تعریف شده توسط کاربر» (User-Defined Modules): برنامهنویسان میتوانند توابع و کلاسهای خود را در قالب ماژول با پسوند py. ذخیره و به دفعات از آنها در پروژههای برنامهنویسی مختلف استفاده کنند.
در ادامه مطلب حاضر، به نحوه فراخوانی ماژولها در پایتون به همراه مثال پرداخته میشود.
نحوه فراخوانی ماژول در پایتون چگونه است ؟
پایتون هزاران ماژول استاندارد دارد که میتوان برخی از این ماژولهای آماده را در پوشه Lib در محل نصب پایتون مشاهده کرد. نحوه فراخوانی ماژولهای توکار، مشابه با شیوه فراخوانی ماژولهای تعریف شده توسط کاربر هستند. به منظور فراخوانی ماژولها در برنامه خود، از دستورات زیر استفاده میشود:
- فراخوانی ماژول در پایتون با استفاده از دستور Import
- فراخوانی ماژول در پایتون با استفاده از تغییر نام ماژول
- فراخوانی ماژول در پایتون با استفاده از دستور From...Import
- فراخوانی ماژول در پایتون با استفاده از دستور *
در ادامه، به توضیح هر یک از دستورات فوق برای فراخوانی ماژولهای توکار پرداخته میشود و پس از آن، توضیحاتی درباره نحوه ساخت ماژول در پایتون و شیوه فراخوانی ماژولهای ساخته شده توسط کاربر ارائه خواهد شد.
فراخواندن ماژول در پایتون با استفاده از دستور Import
به منظور فراخوانی ماژولهای استاندارد در پایتون، از کلمه کلیدیimport استفاده میشود. بعد از نوشتن کلمه کلیدیimport باید نام فایل ماژول مربوطه را وارد کرد. نکته مهم این است که نباید بعد از کلمه کلیدیimport نام تابع درون ماژول نوشته شود. به عبارتی، کلمه کلیدیimport صرفاً برای فراخوانی نام ماژول استفاده میشود. در مثال زیر، ماژولmath ، به عنوان ماژول توکار در پایتون، فراخوانی شده است. پس از فراخوانی این ماژول، میتوان از تابعpi در این ماژول استفاده کرد.
با اجرای دستور فوق، خروجی به صورت زیر خواهد بود.
The value of pi is 3.141592653589793
فراخوانی ماژول در پایتون با استفاده از دستور As برای تغییر نام
با استفاده از کلمه کلیدیas میتوان به ماژول فراخوانی شده، نام مستعار داد. زمانی از نام مستعار برای ماژولها استفاده میشود که نام ماژول طولانی باشد و نوشتن نام کامل ماژول در سراسر برنامه، زمانبر باشد. در مثال زیر، نام مستعارm برای نام ماژولmath درنظر گرفته شده است.
خاطرنشان میشود که با دادن اسم مستعارm به ماژول فراخوانی شده، دیگر نمیتوان از نام اصلی ماژولmath در برنامه استفاده کرد. به عبارتی، باید برای استفاده از ماژول، اسم مستعار جدید ماژول را به کار برد؛ در غیر این صورت، برنامه با خطای کامپایلر مواجه میشود.
Traceback (most recent call last): File "<string>", line 4, in <module> NameError: name 'math' is not defined >
صدا زدن ماژول در پایتون با استفاده از دستور From...Import
با استفاده از دستور From...Import میتوان به جای فراخواندن کل ماژول، اسامی خاصی را از ماژول فراخواند. به عنوان مثال، ماژولmathدارای توابع ریاضیاتی مختلفی است که یکی از این توابع، تابعpiنام دارد. با استفاده از روش فراخوانی From...Import میتوان فقط تابعpi این ماژول را فراخوانی کرد. علاوه بر این، با استفاده از این روش فراخوانی ماژول، دیگر نیازی نیست برای استفاده از تابع ماژول، نام ماژول را نیز به صورتmath.pi به کار ببریم؛ تنها کافی است که نام تابعpiرا مستقیماً در برنامه استفاده کنیم.
همچنین، میتوان با استفاده از دستور From...Import نام چندین تابع و متغیر از یک ماژول را با استفاده از کاما فراخوانی کرد. در مثال زیر، با استفاده از دستور From...Import تابعpiو متغیرe از ماژولmath به صورت همزمان فراخوانی شدهاند.
در خروجی نیز میتوان مستقیماً به مقدار هر یک از توابع و متغیرها به صورت زیر دسترسی داشت.
>>> pi 3.141592653589793 >>> e 2.718281828459045
فراخوانی ماژول در پایتون با استفاده از دستور ستاره
با استفاده از دستور* میتوان تمامی اجزای ماژول را فراخوانی کرد. در مثال زیر، تمامی اسامی مربوط به اجزای ماژولmath فراخوانی شدهاند.
فراخوانی ماژول با استفاده از ستاره روش کارامدی در برنامهنویسی نیست زیرا این روش منجر به کاهش خوانایی برنامه خواهد شد. توصیه میشود از سایر شیوههای فراخوانی در کدنویسی استفاده شود.
معرفی فیلم های آموزش پایتون

سایت فرادرس یک مجموعه آموزشی برای علاقهمندان به یادگیری زبان برنامهنویسی پایتون فراهم کرده است. امروزه، پایتون به عنوان یکی از زبانهای برنامهنویسی شئگرا، در اکثر حوزههای برنامهنویسی استفاده میشود. افراد علاقهمند به این زبان میتوانند از مجموعه فیلمهای آموزشی پایتون در سایت فرادرس استفاده کنند. این دورههای آموزشی شامل فیلمهای آموزشی مقدماتی تا پیشرفته و پروژهمحور زبان پایتون میشوند. در تصویر فوق تنها برخی از دورههای آموزشی مجموعه آموزش پایتون فرادرس نمایش داده شدهاند.
- برای دسترسی به همه آموزش های پایتون فرادرس + اینجا کلیک کنید.
نحوه ساخت ماژول در پایتون چگونه است ؟
نحوه ساخت ماژول در پایتون مشابه روش ایجاد سایر فایلهای پایتون است. ماژولهای پایتون میتوانند شامل تعاریف توابع، کلاسها و متغیرها باشند و با پسوند py. ذخیره شوند. در ادامه، به نحوه ایجاد ماژول در پایتون و نحوه فراخوانی آنها پرداخته میشود.
ساخت ماژول در پایتون برای توابع
ماژولهای تعریف شده در پایتون میتوانند شامل توابع مختلف باشند. به منظور ساخت ماژولی که دارای یک تابع با عنوانworld است و مقداری را در خروجی چاپ میکند، میتوان فایلی با عنوان hello.py ایجاد کرد و قطعه کد زیر را داخل آن نوشت.
دستور بالا تابعی با عنوانworld() تعریف کرده که عبارتHello, World! را در خروجی چاپ میکند. چنانچه این قطعه کد با دستورpython hello.py در خط فرمان اجرا شود، چیزی در خروجی چاپ نمیشود زیرا باید نام این تابع را در جایی از برنامه فراخوانی کرد.
برای فراخوانی ماژولhello در پایتون، در همان مسیری که فایل hello.py در آن ایجاد شد، میتوان فایلی با عنوانmain_program.py ایجاد کرد. چون ماژولhello، ماژول توکار پایتون نیست، برای فراخواندن آن باید فایل ماژولhelloرا در همان مسیر فایلmain_program.pyقرار داد.
به منظور فراخوانی ماژولhelloو استفاده از تابعworld()، در فایلmain_program.pyکد زیر نوشته میشود.
همان طور که در قطعه کد بالا ملاحظه میشود، پس از فراخوانی ماژولhelloبا استفاده از دستورimport ، میتوان از تابعworld()با استفاده از علامت نقطه استفاده کرد.
با استفاده از دستور زیر در خط فرمان، میتوان قطعه کد بالا را اجرا کرد.
خروجی دستور فوق به صورت زیر است:
Hello, World!
چنانچه در مسیر پروژه، فولدی برای ماژولهای ساخته شده در نظر گرفته شود، در هنگام فراخوانی ماژول مورد نظر، در ابتدا باید نام فولدری نوشته شود که ماژول در آن قرار دارد. به عنوان مثال، چنانچه ماژولhelloدر فولدی با عنوان my_modules قرار بگیرد، هنگام فراخوانی ماژول با دستورimport باید نام فولدر ماژول نیز نوشته شود. لازم به ذکر است که در این روش از فراخوانی، تنها از دستور From...Import استفاده میشود.
ایجاد ماژول در پایتون برای متغیرها
میتوان در ماژولها متغیرهایی با مقادیر مشخص تعریف کرد و آنها را در سایر پروژههای پایتون به کار برد. در ماژولhello که پیش از این تعریف شد، میتوان به صورت زیر متغیری با عنوانshark تعریف کرد و مقدار Sammy را به آن تخصیص داد.
با استفاده از دستورimport میتوان ماژولhello را در برنامه فراخوانی کرد و با استفاده از نام ماژول به همراه نقطه و اسم متغیر، به مقدار متغیر Sammy دسترسی داشت.
با اجرا کردن دستور فوق، مقدار Sammy در خروجی به صورت زیر ملاحظه میشود.
Summy
نحوه نوشتن ماژول برای کلاس ها
ماژولها میتوانند شامل تعریف کلاس و اجزای کلاس نظیر مشخصهها و متدها نیز باشند. در مثال زیر، کلاسی با عنوانOctopus در ماژولhelloتعریف شده است که دارای مشخصههایی با عناوینname وcolor و متدی با عنوانtell_me_about_the_octopus برای چاپ مقادیر مشخصهها است.
به منظور استفاده از کلاسOctopusاز ماژولhello، در فایلmain_program.py، شئای از کلاسOctopusبا عنوانjesse ساخته شده است.
همان طور که در قطعه کد بالا ملاحظه میشود، زمانی که با استفاده از دستورhello.Octopus() کلاسOctopusصدا زده میشود، میتوان به توابع درون کلاس و مشخصههای آن دسترسی داشت. بدین ترتیب، میتوان برای مشخصههای کلاسOctopus، مقادیر Jesse و Orange را ارسال کرد. همچنین، با استفاده از نام شئ ساخته شده (jesse)، میتوان به تابع درون ماژول دسترسی داشت.
در این حالت، دیگر نیاز به نوشتن نام ماژول نیست و با دستورjese.tell_me_about_the_octopus() میتوان تابع درون ماژولhelloرا صدا زد. همچنین، میتوان بدون نوشتن نام ماژول، تنها با استفاده از نام شئ به مشخصه کلاس دسترسی داشت. در مثال فوق، میتوان به مشخصهcolor شئjesse ، با استفاده از دستورjesse.color دسترسی داشت.
با اجرای قطعه کد فوق، خروجی برنامه به شکل زیر است:
This octopus is orange. Jesse is the octopus's name.
شایان ذکر است که ماژولها علاوه بر تعاریف (definitions)، میتوانند شامل دستورات اجرایی نیز باشند. به عنوان مثال، میتوان علاوه بر تعریف تابع و نوشتن بدنه آن در ماژولhello ، نام تابع را نیز در این ماژول صدا زد. در مثال زیر، علاوه بر تعریف تابعworld و مشخص کردن بدنه آن، از دستورworld() برای صدا زدن تابع استفاده شده است.
حال میتوان در فایلmain_program.pyتنها نام ماژولhelloرا به صورت زیر فراخوانی کرد.
با فراخوانی ماژولhelloو اجرای کد قبل، خروجی برنامه به صورت زیر است.
Hello, World!
دسترسی به ماژول های پایتون
یکی از اهداف ساخت ماژول، استفاده از آنها در پروژههای برنامهنویسی مختلف است. زمانی که ماژولی فراخوانی میشود، پایتون چندین مسیر را برای فراخوانی ماژول بررسی میکند. مفسر پایتون، در ابتدا بین ماژولهای توکار خود به دنبال ماژول فراخوانی شده میگردد. اگر نام ماژول را در میان ماژولهای توکار پیدا نکرد، نام آن را در لیست مسیرهای تعریف شده درsys.path جستجو میکند. بدین ترتیب، مفسر پایتون، سه مسیر را برای پیدا کردن نام ماژول فراخوانی شده جستجو میکند:
- مسیر جاری که فایل پروژه پایتون در آن قرار دارد. در مثال قبل، مفسر پایتون مسیر فعلی فایلmain_program.pyرا برای پیدا کردن نام ماژولhello جستجو میکند.
- PYTHONPATH (متغیر محیطی به همراه لیستی از مسیرهای مشخص شده)
- مسیر پیشفرض نصب پایتون
منطقی نیست برای فراخوانی ماژول نوشته شده در پروژههای مختلف، آن را در مسیرهای پروژهها قرار دهیم. به عبارتی، برای استفاده از ماژولهای پایتون که خارج از مسیر فایلهای پروژه قرار دارند، بهتر است آنها را به PYTHONPATH یا مسیر پیشفرض نصب پایتون اضافه کرد.
در ادامه مطلب، به توضیح مراحل اضافه کردن ماژول به PYTHONPATH و مسیر پیشفرض نصب پایتون پرداخته میشود.

اضافه کردن مسیر ماژولها به لیست مسیرهای ماژول پایتون
یکی از روشهای استفاده از ماژولهای خارج از مسیر پروژه فعلی، فراخواندن ماژول به همراه مسیر قرار گرفتن آن برروی سیستم است.
به منظور ضمیمه کردن مسیر ماژول به فایل پایتون خود، باید در ابتدا ماژولsys را فراخوانی کرد. ماژولsysماژولی است که در کتابخانه استاندارد پایتون قرار دارد و شامل توابع و پارامترهای خاص سیستم میشود. با استفاده از این ماژول میتوان مسیر ماژولهای مختلف تعریف شده توسط کاربر را در برنامه پایتون مشخص کرد.
برای مثال، میتوان فایل hello.py را به مسیر/usr/sammy/ منتقل کرد تا با فایلmain_program.pyهممسیر نباشد. در این حالت، برای فراخوانی ماژولhelloدر فایلmain_program.py، باید از ماژولsysاستفاده کرد. به عبارتی، با استفاده از ماژولsysمیتوان مسیر ماژولhello را به لیست مسیرهای ماژولهای پایتون اضافه کرد تا پایتون برای فراخوانی آن، به مسیر مشخص شده رجوع کند.
اضافه کردن ماژول به مسیر نصب پایتون
روش دیگری که میتوان از ماژولهای ساخته شده توسط کاربر در سایر پروژههای پایتون استفاده کرد، اضافه کردن ماژول به مسیر نصب پایتون است تا مفسر پایتون، نام ماژول کاربر را همانند نام سایر ماژولها و «بستههای» (Packages) موجود در آن مسیر جستجو کند. این روش دسترسی به ماژول، روشی دائمی است و به راحتی میتوان از ماژول در «سطح محیط مجازی» (Virtual Environment-Level) یا در «سطح کل سیستم» (System-Level) استفاده کرد.
به منظور یافتن مسیرهایی که پایتون برای بررسی ماژولهای خود استفاده میکند، در ابتدا باید در خط فرمان با استفاده از دستور زیر مفسر پایتون را اجرا کرد.
سپس، میتوان با فراخوانی ماژولsys و استفاده از دستورsys.path مسیر سیستم را ملاحظه کرد.
با اجرای قطعه کد فوق، حداقل آدرس یک مسیر، همانند مسیر زیر، در خروجی نمایش داده میشود:
'/usr/sammy/my_env/lib/python3.5/site-packages'
حال میتوان فایل ماژول خود را (فایل hello.py) به مسیر فوق منتقل کرد. پس از انتقال ماژول به مسیر نصب پایتون، میتوان نام ماژول را در هر پروژه پایتون به صورت زیر فراخوانی کرد.
با استفاده از این روش میتوان از طریق پروژههای مختلف پایتون به ماژول دسترسی داشت. به عبارتی، صرف نظر از اینکه پروژه پایتون در کدام مسیر قرار دارد، میتوان ماژول مدنظر خود را به راحتی فراخوانی کرد.
بارگذاری مجدد ماژول
هنگام اجرای کد پایتون، مفسر پایتون تنها یک بار ماژول را با دستورimport در برنامه بارگذاری میکند. برای مثال، میتوان فایلی با عنوان my_module ایجاد کرد و قطعه کد زیر را در آن نوشت.
چنانچه به دفعات مختلف، ماژولmy_module در برنامه فراخوانی شود، دستورات داخل ماژول تنها یک بار اجرا میشوند. در ادامه نیز ملاحظه میشود که دستورprint فقط یک بار اجرا شده است.
اگر تغییراتی در ماژول فراخوانی شده ایجاد شود، میتوان ماژول را در برنامه خود مجدداً بارگذاری کرد. یکی از روشهای بارگذاری مجدد این است که مفسر پایتون را مجدداً اجرا کرد. این روش بارگذاری، روش کارآمدی نیست.
روش کارآمد دیگر برای بارگذاری مجدد ماژول، استفاده از تابعreload() از ماژولimp است. در قطعه کد زیر ملاحظه میشود که بعد از فراخوانی ماژولmy_module ، نام این ماژول با استفاده از تابعreload()مجدداً فراخوانی شده و دستورprintدو بار اجرا میشود.
جمعبندی
زبان پایتون به عنوان یکی از زبانهای برنامهنویسی شئگرا از برنامهنویسی ماژولار پشتیبانی میکند و دارای ماژولهای آماده بسیاری است که میتوان آنها را به سادگی برروی سیستم نصب کرد. همچنین، میتوان ماژولهای جدیدی را در این زبان تعریف و به دفعات از آنها در پروژههای مختلف استفاد کرد. هدف از مقاله حاضر با عنوان «ساخت ماژول در پایتون»، معرفی و توضیح انواع روشهای فراخوانی ماژولهای توکار در زبان برنامهنویسی پایتون بود. همچنین، در این مقاله به توضیح نحوه ساخت ماژول در پایتون پرداخته شد و شیوههای فراخوانی ماژولهای تعریف شده توسط کاربر نیز شرح داده شدند.