مهمترین اصول برنامه نویسی پایتون

این کلاس اصل مسئولیت تک را نقض می کند زیرا دو دلیل اصول برنامه نویسی پایتون برای تغییر اجرای داخلی خود دارد. برای رفع این مشکل و قویتر کردن طراحی خود، میتوانید کلاس را به دو کلاس کوچکتر و متمرکزتر تقسیم کنید که هر کدام دغدغه خاص خود را دارند:
archive.extractall()
اکنون شما دو کلاس کوچکتر دارید که هر کدام فقط یک اصول برنامه نویسی پایتون مسئولیت دارند. FileManager مدیریت یک فایل را بر عهده دارد، در حالی که ZipFileManager فشرده سازی و رفع فشرده سازی یک فایل را با استفاده از فرمت ZIP انجام می دهد. این دو کلاس کوچکتر هستند، بنابراین قابل مدیریت تر هستند. استدلال، آزمایش و اشکال زدایی آنها نیز آسان تر است.
مفهوم مسئولیت در این زمینه ممکن است بسیار ذهنی باشد. داشتن مسئولیت واحد لزوماً به معنای داشتن یک روش واحد نیست. مسئولیت مستقیماً به تعداد متدها بستگی ندارد، بلکه به وظیفه اصلی که کلاس شما مسئول آن است بستگی دارد، بسته به تصور شما از آنچه کلاس در کد شما نشان می دهد. با این حال، این ذهنیت نباید شما را از تلاش برای استفاده از SRP باز دارد.
اصل باز-بسته (OCP)
اصل باز-بسته (OCP) برای طراحی شی گرا در ابتدا توسط اصول برنامه نویسی پایتون برتراند مایر در سال 1988 معرفی شد و به این معنی است که:
موجودیتهای نرمافزار (کلاسها، ماژولها، توابع و غیره) باید برا آموزش برنامه نویسی کودکان و نوجوانان ی توسعه باز باشند، اما برای اصلاح بسته باشند.
برای اینکه بفهمید اصل باز-بسته چیست، اصول برنامه نویسی پایتون کلاس Shape زیر را در نظر بگیرید:
# shapes_ocp.py
از پی واردات ریاضی
شکل کلاس:
def __init__(self, shape_type, **kwargs):
self.shape_type = shape_type
if self.shape_type == "مستطیل":
self.width = kwargs["width"]
self.height = kwargs ["قد"]
elif self.shape_type == "دایره":
self.radius = kwargs["radius"]
def account_area(self):
if self.shape_type == "مستطیل":
بازگشت خود.عرض * خود.قد
elif self.shape_type == "دایره":
بازگشت پی * self.radius**2
مقداردهی اولیه Shape آرگومان shape_type را می گیرد که می تو اصول برنامه نویسی پایتون اند "مستطیل" یا "دایره" باشد. همچنین مجموعه خاصی از آرگومان های کلیدواژه را با استفاده از دستور **kwargs می گیرد. اگر نوع شکل را روی "مستطیل" تنظیم کنید، باید آرگومان های کلمه کلیدی عرض و ارتفاع را نیز ارسال کنید تا بتوانید یک مستطیل مناسب بسازید.
در مقابل، اگر نوع شکل را روی "دایره" تنظیم کنید، باید یک آرگومان شعاع نیز برای ساخت یک دایره ارسال کنید.
توجه: این مثال ممکن است کمی افراطی به نظر برسد. هدف آن این اصول برنامه نویسی پایتون است که به وضوح ایده اصلی پشت اصل باز-بسته را افشا کند.
Shape همچنین دارای یک متد .calculate_area() است که مساحت شکل فعلی را با توجه به .shape_type آن محاسبه می کند:
>>> از shapes_ocp import Shape
>>> مستطیل = شکل ("مستطیل"، عرض = 10، ارتفاع = 5)
>>> rectangle.calculate_area()
50
>>> دایره = شکل ("دایره"، شعاع = 5)
>>> circle.calculate_area()
78.53981633974483
کلاس کار می کند. می توانید دایره ها و مستطیل ها را ایجاد کنید، مساح اصول برنامه نویسی پایتون ت آنها را محاسبه کنید و غیره. با این حال، کلاس بسیار بد به نظر می رسد. در نگاه اول به نظر می رسد چیزی در آن اشتباه است.
تصور کنید که باید یک شکل جدید، شاید یک مربع اضافه کنید. چگونه می خواهید انجام دهید؟ خوب، گزینه ای که در اینجا وجود دارد این است که یک عبارت elif دیگر به .__init__() و به .calculate_area() اضافه کنید تا بتوانید نیازمندی های یک شکل مربع را برطرف کنید.
انجام این تغییرات برای ایجاد اشکال جدید به این مع اصول برنامه نویسی پایتون نی است که کلاس شما برای تغییر باز است. که اصل بسته بودن باز را نقض می کند. چگونه میتوانید کلاس خود را به گونهای اصلاح کنید که آن را برای برنامههای افزودنی باز و برای اصلاح بسته باشد؟ Principles of Python programming در اینجا یک راه حل ممکن است: