ما یک اساسی مهم از قابلیت استفاده مجدد کد در پایتون را توضیح می دهیم: ماژول ها.
چه در برنامه نویسی پایتون متخصص باشید و چه مبتدی، باید بتوانید کد خود را به ماژول های قابل استفاده مجدد تقسیم کنید. در این مقاله، ایجاد، وارد کردن و استفاده مجدد از ماژول های پایتون خود را در درخت پروژه خود خواهید آموخت.
ماژولارسازی کد چیست و چرا باید از آن استفاده کرد؟
ماژولارسازی کد برای جداسازی نگرانی و قابلیت استفاده مجدد کد یکی از اصول اساسی برنامه نویسی است. از آنجایی که پایتون شی گرا است، یکی از آن زبان هایی است که ماژولارسازی را آسان می کند. شما می توانید مدولارسازی کد را به عنوان تخصیص وظایف خاص به توابع یا روش های مختلف در نظر بگیرید. سپس هر کدام می توانند در طول اجرای برنامه با هم کار کنند تا یک برنامه کامل بسازند.
یکی از اهمیت ماژولارسازی کد این است که کد شما را با اصل “تکرار نکنید” مطابقت دهد. بنابراین، هنگامی که یک الگوی دستورالعمل را در یک روش اختصاصی ایجاد میکنید، تنها کاری که انجام میدهید این است که آن را در اسکریپتهای مرتبط اعمال کنید تا از تکرار همان کد در سرتاسر پایه کد خود اجتناب کنید.
وقتی یک کد را مدولار می کنید، یک نام منحصر به فرد به آن می دهید. این نام هویت آن است و به این معنی است که دفعه بعد که باید از آن بلوک کد استفاده کنید، فقط باید نام آن را صدا بزنید و نه کل کد را.
این تمرین کار شما را در طول یک پروژه واقعی آسانتر و سریعتر میکند. علاوه بر اینکه کد شما کارآمدتر و خوانا می شود، ماژولارسازی سرعت اجرا را بهبود می بخشد و تست را آسان تر می کند.
از آنجایی که مثال ما در اینجا از برنامه نویسی شی گرا (OOP) استفاده می کند، باید قبل از ایجاد یک ماژول به طور خلاصه در مورد آن صحبت کنیم. کدی که قصد استفاده مجدد از آن را دارید، میتواند بهعنوان یک تابع مجزا به تنهایی باقی بماند. اما همچنین می تواند یک متد در یک کلاس باشد. این زمانی است که OOP وارد بازی می شود.
برنامه نویسی شی گرا در پایتون
OOP ارائه کد در کلاس های اختصاصی است که به عنوان اشیاء مستقل نمونه سازی می شوند. سپس هر شیء دارای ویژگی ها و روش های خود است. یک کلاس می تواند یک یا چند متد و ویژگی داشته باشد و کلاس دیگری را به ارث ببرد.
ویژگیهای کلاس ویژگیهای کلاس هستند، در حالی که هر متد تابعی است که دستورالعمل خاصی را مدیریت میکند، که ممکن است از برخی ویژگیهای کلاس استفاده کند. هنگامی که یک کلاس را وارد و نمونه سازی می کنید، می توانید ویژگی ها و متدهای آن را در سایر برنامه ها یا قسمت هایی از پایه کد خود بدست آورید و استفاده کنید.
ایجاد ماژول قابل استفاده مجدد خود در پایتون: یک مثال عملی
حالا بیایید ببینیم که چگونه از یک ماژول شمارنده کلمه سفارشی در یک فایل پایتون دیگر استفاده مجدد کنیم. ابتدا، برای شروع یک پروژه جدید، یک خط فرمان را در هر مکانی از رایانه خود باز کنید. در این مورد، از نام پروژه word_count استفاده می کنیم. برای انجام این کار، mkdir word_count را تایپ کنید.
در مرحله بعد، از ابزار محیط مجازی دلخواه خود برای ایجاد یک محیط مجازی جدید استفاده کنید. اگر قبلاً یکی را ایجاد کرده اید، به سادگی آن را فعال کنید. مطمئن شوید که هنوز در فهرست پروژه خود هستید.
برای ایجاد کلاس کلمه شمارنده، ابتدا سعی می کنیم یک فرمول خام برای محاسبه آن پیدا کنیم. توجه داشته باشید که اگرچه ممکن است نیازی به تعداد کلمات نداشته باشید، اما این که چگونه این ایده به قابلیت استفاده مجدد کد مربوط می شود، برای این توضیح مهم است.
بعد، یک ویرایشگر متن را در محل پروژه خود باز کنید و یک فایل پایتون جدید ایجاد کنید. در این مورد، فایل counter.py نام دارد. اطمینان حاصل کنید که از پسوند .py درست استفاده می کنید.
شکل فایل شمارنده به این صورت است:
sentence = 'how to make a reusable word counter in python'
words = sentence.split(' ')
count = sum(1 for word in words if word)
print(count) # 9
اکنون که کد خام کار می کند، آن را در یک متد اختصاصی کلاس پایتون مدولار کنید تا قابل استفاده مجدد باشد:
class WordCounter:
def count_words(self, sentence):
words = sentence.split(' ')
count = sum(1 for word in words if word)
return count
خودشه؛ شما یک ماژول شمارنده کلمه ایجاد کرده اید. بیایید نحوه استفاده مجدد از آن را در یک فایل پایتون دیگر ببینیم.
وارد کردن ماژول ایجاد شده در همان پوشه
به یاد داشته باشید که قبلاً یک فایل به نام counter.py ایجاد کرده اید. آن فایل دارای یک کلاس WordCounter است که دارای روش شمارش کلمه (count_words) است. اگر به متد شمارنده در یک فایل جدید نیاز دارید، کلاس آن را در اسکریپت پایتون جدید خود وارد و نمونه سازی کنید.
توجه داشته باشید که تمام فایل های پایتون شما در این مورد باید در یک دایرکتوری باشند. برای اطمینان از این موضوع، یک فایل پایتون جدید در همان فهرستی که فایل wordcounter.py را دارید ایجاد کنید.
شکل فایل جدید به این صورت است:
from counter import WordCounter
sentence = "how to import and reuse your code in Python"
counter = WordCounter()
print(counter.count_words(sentence)) # 9
حتی می توانید از متد این کلاس در کلاس دیگر از طریق ارث بردن یا ترکیب استفاده کنید. ممکن است بخواهید اصول OOP در پایتون را بدانید تا ببینید چگونه کار می کند.
از ماژول پایتون خود در فهرستی دیگر استفاده مجدد کنید
اگر فایل مقصد در همان دایرکتوری فایل ماژول نیست، به سادگی با استفاده از یک import مطلق به ماژول ارجاع دهید.
برای درک بیشتر این موضوع، فرض کنید یک فایل جدید در دایرکتوری پروژه خود ایجاد کرده اید. اما فایلی که قصد دارید ماژول خود را از آن وارد کنید در پوشه دیگری در فهرست پروژه شما قرار دارد—بیایید آن پوشه را wordcount بنامیم.
برای وارد کردن ماژول خود از counter.py (که اکنون داخل پوشه wordcount است) به یک اسکریپت پایتون در دایرکتوری دیگر:
import sys
sys.path.append(sys.path[0] + "/..")
from wordcount.counter import WordCounter
sentence = 'import and reuse your Python code from files with different paths'
counter = WordCounter()
print(counter.count_words(sentence)) # 11
متد sys.path.append فهرست کاری فعلی را به پوشه والد پروژه شما اضافه می کند. بنابراین ممکن است بخواهید این کار را برای همه فایل های مقصد انجام دهید تا ماژول های شما در درخت پروژه شما قابل اجرا باشند.
در طول واردات مطلق، پایتون از طریق پوشه والد (در این مورد تعداد کلمات) مرور میکند و ماژول مورد نظر (counter.py) را مکانیابی میکند.
دایرکتوری پروژه به شکل زیر است:
word_count
├─ destination
│ └─ destination.py
└─ wordcount
└─ counter.py
شکستن ساختار پوشه: word_count دایرکتوری والد است. این شامل پوشههای wordcount و مقصد است که به ترتیب فایلهای counter.py و destination.py را در خود جای میدهند. سپس اسکریپت counter.py شامل کلاس WordCounter میشود—هنگامی که در داخل destination.py نمونهسازی شود، میتواند متدها و ویژگیهای خود را مطابق با آن اجرا کند.
قابلیت استفاده مجدد کد کجا کار می کند؟
ماژولار کردن و استفاده مجدد از کد شما بهترین روش برای هر پروژه ای است که در حال اجرا هستید. در حالی که ساختار پروژه شما ممکن است کاملاً متفاوت باشد، این راهنما مبنایی برای استفاده از ماژول های سفارشی در اسکریپت های پروژه شما فراهم می کند. مفهوم مشابهی برای توابعی که در یک شی نیستند اعمال می شود. بسته به طرح پروژه خود، می توانید آنها را بطور صریح یا مطلق وارد کنید، همانطور که در بالا انجام دادیم.