ماژولها و پایتون
توسط: vahit
توی پروژههای کوچیک میشه همهی کلاسهای مورد نیاز رو در ابتدای یک فایل نوشت و در ادامهی اون بقیهی کدهای مورد نیاز پروژه رو نوشت. امّا وقتی پروژه پیشرفت میکنه و بزرگتر میشه استفاده از این روش دردسر سازه برای مثال اگه کلاسی نیاز به ویرایش داشته باشه پیدا کردن اون از بین انبوهی از کدها سخته. اینجا دقیقاً همونجایی هست که ماژول وارد میشود!
در حقیقت ماژول چیزی غیر از یک فایل پایتون ساده نیست. یعنی یک فایل پایتون یک ماژول هست، دوتا فایل پایتون ۲تا ماژول، و اگر ما ۲تا فایل در یک مسیر داشته باشیم میتونیم کلاسی رو از یکی از اونها به دیگری وارد (load) کرده و استفاده کنیم.
برای مثال اگه یه پروژهی تجارت الکترونیک داشته باشیم، نیاز داریم اطلاعاتی رو داخل پایگاهداده ذخیره کنیم. ما میتونیم تمام کلاسها و توابع مورد نیاز برای ارتباط با پایگاهداده رو داخل یک ماژول (که میشه حدس زد اسمش database.py خواهد بود) قرار بدیم. بدین ترتیب بقیهی ماژولها (مثل customers, product و …) برای ارتباط با پایگاهداده میتونن کلاس و تابع مورد نیاز خودشون رو از داخل ماژول پایگاهداده ایمپورت (import) کرده و استفاده کنن.
جملهی import برای وارد کردن ماژول، یک کلاس تا تابع خاص از داخل ماژول مورد نظر به کار میره. فرض کردیم که یک ماژول به اسم database.py داریم که یک کلاس به اسم DataBase داره و یک ماژول دیگه به اسم products.py داریم که مسئول مسائل مربوط به محصولات هست و برای اجرای کوئری روی جدول محصولات به کلاس DataBase از ماژول database.py نیاز داره. نحوهای مختلفی برای ایمپورت ماژول وجود داره:
1 2 |
import database db = database.DataBase() |
با این ساختار ایمپورت، همهی کلاسها و توابع موجود در ماژول database با استفاده از ساختار database.<foobar> در دسترس هستن.
با استفاده از ساختار from … import میتونیم فقط یک کلاس خاص رو ایمپورت کنیم:
1 2 |
from database import DataBase db = DataBase |
اگر به هر دلیلی ماژول products از قبل کلاسی به اسم DataBase داشته باشه برای جلوگیری از اشتباه میشه اسم کلاس رو موقع ایمپورت عوض کرد:
1 2 |
from database import DataBase as DB db = DB |
اگر ماژول database یک کلاس دیگر به اسم Query داشته باشه که لازم به ایمپورت اون هم داشته باشم میتونیم به جای دستورات:
1 2 |
from database import DataBase from database import Query |
چندین کلاس رو در یک خط ایمپورت کنیم:
1 |
from database import DataBase, Query |
در برخی منابع گفته شده که میشه برای ایمپورت همهی کلاسها و توابع یک ماژول از ساختار زیر هم استفاده کرد:
1 |
from database import * |
امّا بنا به دلایلی که در پست بعدی بررسی شون میکنیم توصیهی اکید شده تا حد امکان از ساختار import * استفاده نکنیم.
منبع:
ترجمهی آزاد از صفحات ۴۳ و ۴۴ کتاب Python 3 Object Oriented Programming نوشتهی Dusty Phillips
[…] پست قبلی گفتیم که توصیه اکید شده از ساختار import * برای ایمپورت […]