کتابخانه‌ی استاندارد پایتون و شکل‌دهی به کلاس‌ها

کتابخانه‌ی استاندارد پایتون مجموعه‌ای از ماژول‌هاست که در هر نسخه‌ی نصب‌شده‌ی پایتون یافت می‌شود. اکنون که به طور مقدّماتی از نحوه‌ی کار تابع‌ها و کلاس‌ها اطّلاع یافته‌اید، می‌توانید به‌کارگیری ماژول‌هایی مانند این را که دیگر برنامه‌نویسان نوشته‌اند شروع کنید. می‌توانید با وارد کردن یک عبارت import ساده در بالای فایل خود از هر تابع یا کلاسی از کتابخانه‌ی استاندارد استفاده کنید. بیایید به یکی از ماژول‌ها، random، نگاهی بیندازیم که در مدل‌سازی بسیاری از وضعیّت‌های دنیای واقعی می‌تواند سودمند باشد.

یکی از تابع‌های جالب در ماژول اعداد تصادفی randint() است. این تابع دو عدد صحیح را به عنوان نشان‌وند می‌گیرد و یک عدد صحیح تصادفی بین این دو عدد (و خود آن‌ها) برمی‌گرداند.

اینجا نحوه‌ی تولید عددی تصادفی بین ۱ و ۶ را می‌بینیم:

1
2
3
from random import randint

randint(1, 6)
1
3

تابع سودمند دیگر choice() است. این تابع یک لیست یا چندتایی را گرفته و یکی از اعضای آن را به صورت تصادفی برمی‌گرداند:

1
2
3
4
5
6
7
from random import choice

players = ['charles', 'martina', 'michael', 'florence', 'eli']

first_up = choice(players)

first_up
1
'florence'

ماژول random نباید برای ساختن برنامه‌های کاربردی با محوریّت امنیّت استفاده شود امّا برای پروژه‌های سرگرمی و جذّاب به اندازه‌ی کافی خوب است.

نکته
می‌توانید ماژول‌ها را از منابع خارجی هم بگیرید. چند نمونه از آن‌ها را در بخش دوم کتاب خواهید دید جایی که برای تکمیل هر پروژه به ماژول‌های خارجی نیاز دارید.

خودآزمایی

۹-۱۳. تاس: کلاسی به نام Die بسازید که مشخّصه‌ای به نام sides (وجه‌ها) دارد و مقدار اوّلیّه‌ی آن ۶ است. متدی به نام roll_die() بنویسید که عددی تصادفی بین ۱ و تعداد وجه‌های تاس چاپ می‌کند. تاسی شش‌وجهی بسازید و آن را ۱۰ بار بیندازید.

یک تاس ده‌وجهی و بیست‌وجهی بسازید و هر کدام را ۱۰ بار بیندازید.

۹-۱۴. بخت‌آزمایی: لیست یا چندتایی‌ای از ۱۰ عدد و ۵ حرف بسازید. چهار عدد یا حرف را به طور تصادفی از لیست انتخاب کنید و پیامی چاپ کنید که شماره‌ی بلیت هرکس به این چهار حرف یا عدد بخورد برنده‌ی جایزه‌ای شده است.

۹-۱۵. تحلیل بخت‌آزمایی: برای بررسی این که برنده شدن در بخت‌آزمایی‌ای که مدل کرده‌اید، چه‌قدر می‌تواند سخت باشد می‌توانید از یک حلقه استفاده کنید. لیست یا چندتایی‌ای به نام my_ticket بسازید. حلقه‌ای بنویسید که تا زمان برنده شدن بلیت شما به تولید دنباله‌ی اعداد و حروف ادامه دهد و شماره‌ی تعداد دفعات حلقه را نگه دارد. پیامی چاپ کنید که گزارش کند حلقه برای برنده شدن شما چند بار اجرا شده است.

۹-۱۶. ماژول هفته‌ی پایتون: یکی از منابع عالی برای کاویدن کتابخانه‌ی استاندارد پایتون سایتی به نام Python Module of the Week است. به نشانی https://pymotw.com/ بروید و به فهرست آن نگاهی بیندازید. ماژولی را پیدا کنید که به نظرتان جالب می‌آید و درباره‌ی آن بخوانید، شاید بهتر باشد از ماژول random شروع کنید.

شکل‌دادن به کلاس‌ها

تعداد کمی از نکات مربوط به شکل‌دهی کلاس‌ها ارزش شفاف‌سازی دارند به ویژه زمانی که برنامه‌های شما به تدریج پیچیده‌تر می‌شوند.

نام کلاس‌ها باید به صورت CamelCase نوشته شوند. برای این کار اوّلین حرف هر کلمه را بزرگ کنید و از زیرخط‌ها استفاده نکنید. نام ماژول‌ها و نمونه‌ها باید با حروف کوچک و زیرخط بین واژگان نوشته شوند.

هر کلاس باید بلافاصله بعد از تعریف کلاس یک docstring داشته باشد. این docstring باید شرحی خلاصه از آن‌چه کلاس انجام می‌دهد باشد و برای نوشتن آن باید از همان قواعد نوشتن docstring در تابع‌ها پیروی کنید. هر ماژول نیز باید docstringای داشته باشد که مواردِ استفاده‌ی کلاس‌های ماژول را شرح دهد.

همچنین می‌توانید از خط‌های خالی برای مرتّب کردن کدهای خود استفاده کنید امّا از آن‌ها بیش از حد استفاده نکنید. در هر کلاس از یک خط خالی بین متدها و در هر ماژول از دو خط خالی برای جدا کردن کلاس‌ها استفاده کنید.

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

خلاصه

در این فصل آموختید که چگونه کلاس‌های خود را بنویسید. یاد گرفتید که چگونه به کمک مشخّصه‌ها اطّلاعاتی را در کلاس‌ها ذخیره کنید و چگونه با نوشتن متدها رفتاری را که می‌خواهید به کلاس‌های خود بدهید. چگونه نوشتن متدهای __init__() را آموختید که دقیقاً با مشخّصه‌هایی که می‌خواهید، نمونه‌هایی از کلاس‌های شما می‌سازند. چگونگی تغییر دادن مشخّصه‌ها را به طور مستقیم و از طریق متدها دیدید. آموختید که ارث‌بری می‌تواند ساختن کلاس‌هایی را که به هم مربوط‌اند ساده کند و یاد گرفتید که چگونه از نمونه‌های یک کلاس به عنوان مشخّصه‌هایی در کلاس دیگر استفاده کنید تا هر کلاس را ساده نگه دارید.

دیدید که چگونه ذخیره کردن کلاس‌ها در ماژول‌ها و وارد کردن آن‌ها در فایل‌ها (هر جا که مورد نیاز بودند) پروژه‌های شما را مرتّب نگه می‌دارد. آموختن درباره‌ی کتابخانه‌ی استاندارد پایتون را آغاز کردید و مثالی بر پایه‌ی ماژول random مشاهده کردید. در نهایت شکل‌دهی به کلاس‌های خود را بر اساس قراردادهای پایتون آموختید.

در فصل ۱۰ کار کردن با فایل‌ها را خواهید آموخت تا بتوانید کارهایی را که در یک برنامه کرده‌اید یا به کاربران اجازه‌ی انجام داده‌اید، ذخیره کنید و هم‌چنین در مورد استثناها خواهید آموخت که کلاسی خاص در پایتون است که به شما در واکنش دادن به خطاهایی که رخ می‌دهند کمک می‌کند.