Package و module

Package (پکیج) و Module (ماژول) راهی برای دسته بندی کدهای برنامه می‌باشد. ابتدا با یک مثال شروع می‌کنیم. فرض کنید شما تعداد زیادی آهنگ از خواننده‌های مختلف دارید. تعداد پوشه ایجاد می‌کنید و با نام گذاری هر پوشه به نام یک خواننده خاص، آهنگ‌های مربوط به هر کدام را در پوشه مربوطه می‌گذارید. رابطه بین Package و Module هم همینطور است. Package در حکم پوشه و Module در حکم آهنگ می‌باشد. به شکل زیر توجه کنید:

همانطور که در شکل بالا مشاهده می‌کنید، پکیج Game خود شامل سه پکیج دیگر به نام‌های Sound ،Image و Level است و هر کدام از این سه پکیج دارای ماژول‌های مربوط به خود هستند.

پس همانطور که احتمالاً تا کنون متوجه شده‌اید، اگر برنامه شما دارای 5000 خط کد است و این برنامه شامل کلاس‌ها و متدهای مختلفی است، بهتر است این کلاس‌ها و متدها را در داخل ماژول‌های مختلف نوشته و آنها را در پکیج‌های مختلف قرار دهید، تا هم مدیریت و هم خطایابی آنها راحت‌تر شود.

حال سؤال اینجاست که چگونه از این پکیج و ماژول‌ها استفاده کنیم؟ جواب، استفاده از کلمه import و عملگر نقطه (.) می‌باشد. مثلاً درشکل بالا برای استفاده از ماژول paly که در پکیج Sound قرار دارد در داخل یک فایل دیگر، در ابتدای فایل مورد نظرمان کد زیر را می‌نویسیم :

import Game.Sound.play

همانطور که در کد بالا مشاهده می‌کنید، باید اسم پکیج‌ها به صورت سلسله مراتبی ذکر و با علامت نقطه از هم جدا شوند. اگر بخواهید یک کلاس که در داخل یک ماژول تعریف شده است را فراخوانی کرده و از کدهای داخل آن استفاده کنید، باید به صورت زیر عمل کنید:

from Package.Moudle import Class

معنای کد بالا این است که از ماژول Moudle که در پکیج Package قرار دارد کلاس Class را وارد برنامه کن. برای روشن شدن مطلب یک فایل با نام Program.py در هر درایوی که دوست دارید ایجاد کنید (مثلاً در درایو C یا D و …). در داخل همین درایو دو پوشه به نام‌های PackageA و PackageB ایجاد کرده و در داخل این پوشه‌های هم به ترتیب دو فایل MoudleA.py و MoudleB.py قرار دهید. ساختار نهایی برنامه شما باید به صورت زیر باشد :

در داخل فایل MoudleA.py کدهای زیر :

class classA:
    def methodA():
        print("This is methodA of classA in PackageA.");

و در داخل فایل MoudleB.py کدهای زیر را بنویسید:

class classB:
    def methodB():
        print("This is methodB of classB in PackageB.");

حال فرض کنید که می‌خواهید از methodA استفاده کنید. برای این منظور باید ماژول و کلاس مربوطه را وارد برنامه کنید. فایل Program.py را باز کرده و کدهای زیر را در داخل نوشته و فایل را اجرا کنید:

from PackageA.MoudleA import classA

CA = classA;
CA.methodA();

اگر بجز classA کلاس‌های دیگری در داخل MoudleA قرار داشته باشند و شما بخواهید همه آن کلاس‌ها را به صورت یکجا وارد برنامه کنید می‌توانید از علامت * به صورت زیر استفاده نمایید:

from PackageA.MoudleA import *

در آخر هم شما را با کلمه کلیدی as آشنا می‌کنیم. از این کلمه کلیدی برای ایجاد یک نام مستعار برای ماژول استفاده می‌شود. گاهی اوقا ممکن است که نام یک ماژول طولانی باشد و یا بخواهید به جای نام یک ماژول، نامی به دلخواه خودتان، را استفاده کنید. برای این منظور می‌توانید از این کلمه کلیدی به صورت زیر استفاده کنید:

import thisIsAnExampleMoudle as myMoudle

در نتیجه در ادامه برنامه هر جای که لازم بود از ماژول thisIsAnExampleMoudle استفاده کنید کافیست نام myMoudle را به جای آن بنویسید.