وبلاگ
برنامهنویسی شیگرا در پایتون: چیت شیت مختصر و مفید
فهرست مطالب
“تسلط به برنامهنویسی پایتون با هوش مصنوعی: آموزش کدنویسی هوشمند با ChatGPT”
0 تا 100 عطرسازی + (30 فرمولاسیون اختصاصی حامی صنعت)
Claude & GPT Credit – API | IDE | n8n
خرید کردیت API برای Claude و GPT با امکان استفاده در IDE و n8n. مناسب برنامهنویسی، تولید محتوا، تحلیل داده و ساخت اتوماسیون؛ راهنمای اتصال و پشتیبانی حامی صنعت همراه سفارش ارائه میشود. مدل و مقدار اعتبار را پیش از خرید بررسی کنید و برای دریافت کردیت API اقدام کنید.
اکانت Leonardo.ai با 8500 کردیت
خرید اکانت ChatGPT Plus یک ماهه با کردیت CODEX اختصاصی
خرید اکانت Gemini Pro و Gemini Advanced ۱۸ ماهه اختصاصی (تضمین فعالسازی)
خرید اکانت Gemini Pro و Gemini Advanced هجدهماهه با فعالسازی روی ایمیل شخصی و پشتیبانی حامی صنعت. مناسب تولید محتوا، برنامهنویسی، تحلیل فایل و استفاده از ابزارهای هوش مصنوعی گوگل. شرایط فعالسازی را مطالعه کنید و برای سفارش اقدام کنید.
دایرکت اتوماتیک اینستاگرام حامی | اشتراک ۳۰روزه یک پیج
اشتراک ۳۰روزه پنل دایرکت اتوماتیک اینستاگرام حامی برای یک پیج؛ پاسخ خودکار کامنت و دایرکت، کمپین کلمه کلیدی، قفل فالو، جذب لید، دکمه و لینک و گزارش تحلیل پیج. پاسخهای ثابت بدون نیاز به هوش مصنوعی کار میکنند و اتصال OpenAI Compatible اختیاری است. همین حالا اشتراک پنل اینستاگرام را تهیه کنید و راهاندازی را از داخل پنل فارسی شروع کنید.
دوره آموزش Flutter و برنامه نویسی Dart [پروژه محور]
دوره جامع آموزش برنامهنویسی پایتون + هک اخلاقی [با همکاری شاهک]
دوره جامع آموزش فرمولاسیون لوازم آرایشی
دوره جامع علم داده، یادگیری ماشین، یادگیری عمیق و NLP
برنامهنویسی شیگرا در پایتون: چیت شیت مختصر و مفید
برنامهنویسی شیگرا (Object-Oriented Programming یا OOP) یک پارادایم برنامهنویسی قدرتمند است که به شما امکان میدهد کد خود را به روشی سازمانیافته و قابلاستفاده مجدد ساختاربندی کنید. پایتون به طور کامل از OOP پشتیبانی میکند و ابزارهای لازم برای ایجاد کلاسها، اشیاء و پیادهسازی مفاهیم کلیدی مانند وراثت، چندریختی و کپسولهسازی را فراهم میکند. این چیت شیت برای برنامهنویسان با تجربه پایتون طراحی شده است که میخواهند یک مرجع سریع و مختصر برای مفاهیم و سینتکس OOP در پایتون داشته باشند.
چرا برنامهنویسی شیگرا؟
قبل از ورود به جزئیات، بیایید به این سوال پاسخ دهیم که چرا اصلاً باید از OOP استفاده کنیم. مزایای OOP عبارتند از:
- قابلیت استفاده مجدد کد: با تعریف کلاسها، میتوانید از آنها برای ایجاد اشیاء متعدد استفاده کنید، بدون اینکه نیاز به نوشتن کد تکراری باشد.
- سازماندهی بهتر کد: OOP به شما کمک میکند تا کد خود را به واحدهای منطقی (کلاسها) تقسیم کنید، که نگهداری و درک آن را آسانتر میکند.
- مدلسازی دنیای واقعی: OOP به شما امکان میدهد اشیاء و روابط دنیای واقعی را به طور مستقیم در کد خود مدلسازی کنید.
- قابلیت توسعه: افزودن ویژگیهای جدید به یک برنامه OOP معمولاً آسانتر از برنامههای رویهای است.
مفاهیم کلیدی OOP
برای استفاده مؤثر از OOP، باید با مفاهیم کلیدی آن آشنا باشید:
- کلاس (Class): یک الگو یا طرح اولیه برای ایجاد اشیاء. کلاس تعریف میکند که اشیاء از چه ویژگیها (attributes) و رفتارهایی (methods) برخوردار خواهند بود.
- شیء (Object): یک نمونه (instance) از یک کلاس. هر شیء دارای ویژگیها و رفتارهای خاص خود است که در کلاس تعریف شدهاند.
- ویژگی (Attribute): یک متغیر که به یک شیء تعلق دارد. ویژگیها دادههایی را ذخیره میکنند که وضعیت یک شیء را نشان میدهند.
- متد (Method): یک تابع که به یک شیء تعلق دارد. متدها رفتارهایی را تعریف میکنند که یک شیء میتواند انجام دهد.
- وراثت (Inheritance): مکانیزمی که به یک کلاس (کلاس فرزند یا subclass) اجازه میدهد ویژگیها و متدهای یک کلاس دیگر (کلاس پدر یا superclass) را به ارث ببرد.
- چندریختی (Polymorphism): توانایی یک شیء برای داشتن اشکال مختلف. به عبارت دیگر، اشیاء مختلف میتوانند به یک پیام به روشهای مختلف پاسخ دهند.
- کپسولهسازی (Encapsulation): پنهان کردن جزئیات پیادهسازی داخلی یک شیء از دنیای خارج. کپسولهسازی به شما امکان میدهد از دادههای یک شیء در برابر دسترسی غیرمجاز محافظت کنید و تغییرات داخلی را بدون تأثیر بر سایر قسمتهای کد خود اعمال کنید.
- انتزاع (Abstraction): نمایش دادن ویژگیها و رفتارهای ضروری یک شیء به کاربر، در حالی که جزئیات غیرضروری پنهان میشوند.
سینتکس پایتون برای OOP
اکنون که با مفاهیم کلیدی OOP آشنا شدید، بیایید نگاهی به سینتکس پایتون برای پیادهسازی این مفاهیم بیندازیم.
تعریف کلاس
برای تعریف یک کلاس در پایتون، از کلمه کلیدی class استفاده میکنیم:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print("Woof!")
در این مثال، ما یک کلاس به نام Dog تعریف کردهایم. این کلاس دارای دو ویژگی (name و breed) و یک متد (bark) است.
متد __init__
متد __init__ یک متد ویژه است که به عنوان سازنده (constructor) کلاس عمل میکند. این متد زمانی فراخوانی میشود که یک شیء از کلاس ایجاد میشود. از متد __init__ برای مقداردهی اولیه ویژگیهای یک شیء استفاده میشود.
پارامتر self در متد __init__ به شیء در حال ایجاد اشاره دارد. هر متدی که در یک کلاس تعریف میکنید باید پارامتر self را به عنوان اولین پارامتر خود داشته باشد.
ایجاد شیء
برای ایجاد یک شیء از یک کلاس، نام کلاس را به عنوان یک تابع فراخوانی میکنیم:
my_dog = Dog("Buddy", "Golden Retriever")
این کد یک شیء به نام my_dog از کلاس Dog ایجاد میکند. ویژگیهای name و breed این شیء به ترتیب با مقادیر “Buddy” و “Golden Retriever” مقداردهی اولیه میشوند.
دسترسی به ویژگیها و متدها
برای دسترسی به ویژگیها و متدهای یک شیء، از عملگر نقطه (.) استفاده میکنیم:
print(my_dog.name) # Output: Buddy
my_dog.bark() # Output: Woof!
وراثت
برای ایجاد یک کلاس فرزند که از یک کلاس پدر ارث میبرد، نام کلاس پدر را در پرانتز بعد از نام کلاس فرزند مشخص میکنیم:
class Bulldog(Dog):
def __init__(self, name):
super().__init__(name, "Bulldog")
def snore(self):
print("Zzzzz...")
در این مثال، ما یک کلاس به نام Bulldog ایجاد کردهایم که از کلاس Dog ارث میبرد. کلاس Bulldog دارای یک متد جدید به نام snore است. همچنین، متد __init__ کلاس Bulldog با فراخوانی super().__init__(name, "Bulldog") سازنده کلاس پدر را فراخوانی میکند تا ویژگیهای name و breed را مقداردهی اولیه کند.
چندریختی
چندریختی به شما امکان میدهد اشیاء مختلف را به یک روش یکسان رفتار کنید. به عنوان مثال، میتوانید یک لیست از اشیاء مختلف داشته باشید و متد یکسانی را روی همه آنها فراخوانی کنید، و هر شیء به روش خاص خود به این فراخوانی پاسخ دهد.
class Cat:
def speak(self):
print("Meow!")
class Dog:
def speak(self):
print("Woof!")
animals = [Cat(), Dog()]
for animal in animals:
animal.speak()
# Output:
# Meow!
# Woof!
در این مثال، هر دو کلاس Cat و Dog دارای یک متد به نام speak هستند. با این حال، هر کلاس این متد را به روش خاص خود پیادهسازی میکند. وقتی متد speak را روی هر شیء در لیست animals فراخوانی میکنیم، هر شیء به روش مناسب خود پاسخ میدهد.
کپسولهسازی
کپسولهسازی به شما امکان میدهد دادههای داخلی یک شیء را از دنیای خارج پنهان کنید. در پایتون، معمولاً این کار با استفاده از قراردادهای نامگذاری انجام میشود. ویژگیها و متدهایی که با یک زیرخط (_) شروع میشوند، به عنوان خصوصی (private) در نظر گرفته میشوند و نباید مستقیماً از خارج از کلاس به آنها دسترسی پیدا کرد. ویژگیها و متدهایی که با دو زیرخط (__) شروع میشوند، به عنوان بسیار خصوصی (strongly private) در نظر گرفته میشوند و نام آنها به گونهای تغییر میکند که دسترسی به آنها حتی از کلاسهای فرزند نیز دشوارتر شود.
class BankAccount:
def __init__(self, balance):
self._balance = balance # Protected attribute
self.__account_number = 12345 # Strongly private attribute
def deposit(self, amount):
self._balance += amount
def get_balance(self):
return self._balance
my_account = BankAccount(1000)
print(my_account.get_balance()) # Output: 1000
my_account.deposit(500)
print(my_account.get_balance()) # Output: 1500
# print(my_account.__account_number) # This will raise an AttributeError
print(my_account._balance) # Accessing a protected attribute is possible, but discouraged. Output: 1500
در این مثال، ویژگی _balance یک ویژگی محافظتشده (protected) است و ویژگی __account_number یک ویژگی بسیار خصوصی است. در حالی که از نظر فنی میتوان به ویژگی _balance از خارج از کلاس دسترسی پیدا کرد، این کار به طور کلی توصیه نمیشود. تلاش برای دسترسی به ویژگی __account_number منجر به یک AttributeError خواهد شد، زیرا نام آن تغییر یافته است.
انتزاع
انتزاع به شما امکان میدهد جزئیات غیرضروری را پنهان کرده و فقط ویژگیها و رفتارهای ضروری را به کاربر نشان دهید. در پایتون، انتزاع اغلب با استفاده از کلاسهای انتزاعی (abstract classes) و متدهای انتزاعی (abstract methods) پیادهسازی میشود. یک کلاس انتزاعی کلاسی است که نمیتوان از آن شیء ایجاد کرد. متدهای انتزاعی متدهایی هستند که هیچ پیادهسازی ندارند و باید توسط کلاسهای فرزند پیادهسازی شوند.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
# shape = Shape() # TypeError: Can't instantiate abstract class Shape with abstract methods area
rectangle = Rectangle(5, 10)
print(rectangle.area()) # Output: 50
در این مثال، کلاس Shape یک کلاس انتزاعی است که دارای یک متد انتزاعی به نام area است. کلاس Rectangle از کلاس Shape ارث میبرد و متد area را پیادهسازی میکند. تلاش برای ایجاد یک شیء از کلاس Shape منجر به یک TypeError خواهد شد.
بهترین شیوهها برای OOP در پایتون
برای نوشتن کد OOP خوب در پایتون، به این نکات توجه کنید:
- اصل تک مسئولیتی (Single Responsibility Principle): هر کلاس باید فقط یک مسئولیت داشته باشد. این اصل به شما کمک میکند تا کلاسهایی ایجاد کنید که آسانتر قابل درک، نگهداری و تست باشند.
- اصل باز/بسته (Open/Closed Principle): کلاسها باید برای توسعه باز و برای تغییر بسته باشند. به عبارت دیگر، باید بتوانید رفتار یک کلاس را بدون تغییر کد اصلی آن گسترش دهید.
- اصل جایگزینی لیسکوف (Liskov Substitution Principle): کلاسهای فرزند باید بتوانند جایگزین کلاسهای پدر خود شوند بدون اینکه برنامه را خراب کنند.
- اصل جداسازی رابط (Interface Segregation Principle): کلاینتها نباید مجبور به پیادهسازی رابطهایی شوند که از آنها استفاده نمیکنند.
- اصل وارونگی وابستگی (Dependency Inversion Principle): ماژولهای سطح بالا نباید به ماژولهای سطح پایین وابسته باشند. هر دو باید به انتزاعها وابسته باشند. انتزاعها نباید به جزئیات وابسته باشند. جزئیات باید به انتزاعها وابسته باشند.
- استفاده از Docstring: برای مستندسازی کلاسها، متدها و ویژگیها از docstring استفاده کنید. Docstringها توضیحات کوتاهی هستند که در ابتدای یک کلاس یا متد قرار میگیرند.
- نامگذاری مناسب: از نامهای توصیفی برای کلاسها، متدها و ویژگیها استفاده کنید. این کار به خوانایی کد شما کمک میکند.
- پرهیز از وراثت بیش از حد: وراثت بیش از حد میتواند منجر به پیچیدگی و دشواری در نگهداری کد شود. در صورت امکان، از ترکیب (composition) به جای وراثت استفاده کنید.
- نوشتن تستهای واحد: برای اطمینان از اینکه کد OOP شما به درستی کار میکند، تستهای واحد بنویسید.
الگوهای طراحی (Design Patterns) در OOP
الگوهای طراحی راه حل های امتحان شده و آزمایش شده برای مشکلات رایج در طراحی نرم افزار هستند. استفاده از الگوهای طراحی می تواند به شما کمک کند کد OOP بهتری بنویسید. برخی از الگوهای طراحی رایج عبارتند از:
- الگوی Singleton: تضمین میکند که یک کلاس فقط یک نمونه دارد و یک نقطه دسترسی جهانی به آن نمونه فراهم میکند.
- الگوی Factory: یک رابط برای ایجاد اشیاء فراهم میکند، اما به کلاسهای فرزند اجازه میدهد تا نوع اشیاء ایجاد شده را تعیین کنند.
- الگوی Observer: یک رابطه یک به چند بین اشیاء تعریف میکند، به طوری که وقتی یک شیء تغییر میکند، همه اشیاء وابسته به آن مطلع میشوند.
- الگوی Strategy: به شما امکان میدهد الگوریتمها را در زمان اجرا انتخاب کنید.
- الگوی Decorator: به شما امکان میدهد رفتار یک شیء را به صورت پویا بدون تغییر کد آن اضافه کنید.
نتیجهگیری
برنامهنویسی شیگرا یک پارادایم قدرتمند است که میتواند به شما کمک کند کد بهتری بنویسید. با درک مفاهیم کلیدی OOP و استفاده از بهترین شیوهها، میتوانید از مزایای OOP در پروژههای پایتون خود بهرهمند شوید. این چیت شیت به عنوان یک مرجع سریع و مختصر برای مفاهیم و سینتکس OOP در پایتون عمل میکند. به یاد داشته باشید که تمرین کلید تسلط بر OOP است. با نوشتن کد بیشتر و حل مسائل بیشتر، مهارتهای OOP خود را بهبود خواهید بخشید.
کدنویسی سریع با هوش مصنوعی
برای یادگیری نحوه دیباگ و حل چالشهای پایتون با هوش مصنوعی، صفحه آموزش پایتون با ChatGPT را مشاهده کنید.