ویدیو آموزش برنامه‌نویسی شی گرا(oop) در پایتون

January 2022


# شی گرایی در پایتون چیست؟

در این ویدیو مبحث شی گرایی در پایتون را شروع میکنیم. برنامه نویسی شی گرا یک شیوه برنامه نویسی است که با استفاده از آن میتوانید کدهای خود را در کلاس‌ها دسته بندی کنید و سپس از این کلاس‌‌ها نمونه های کوچک تر ساخته و به اطلاعات کلاس دسترسی پیدا کنید.

 

با برنامه نویسی شی گرا میتوانید از از دنیای واقعی تقلید کنید. میتوانید کلاسی برای اتومبیل داشته باشید که موارد مانند سرعت، قیمت یا شرکت سازنده را مشخص میکند.

 

برنامه نویسی شی گرا به اختصار oop نیز نامیده میشود که مخفف کلمه Object-Oriented Programming است. برنامه نویسی شی گرا اولین بار در سال 1960 معرفی شد و در حال حاضر اکثر زبان‌ها برنامه نویسی از آن پشتیبانی میکنند.

 

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

 


 

# تعریف کلاس‌ در پایتون

در این بخش از آموزش شی گرایی در پایتون به سراغ class میرویم. کلاسها مانند یک طرح اولیه هستند که می توانید برای ایجاد اشیاء از آنها استفاده کنید. ما کلاسها را با استفاده از کلمه کلیدی class تعریف می کنیم. کلاس‌ها رفتارهای کلی را مشخص میکنند که بعدا ممکن است توسط آبجکت‌‌ها تغییر داده شوند. کلاس‌ها معمولا اطلاعاتی داخل خود ذخیره نمیکنند و فقط مشخص میکنند که یک چیز باید چه شکلی باشد.

 

بیایید یک کلاس به نام Car ایجاد کنیم. هر کدی که در زیر کلاس قرار گرفته باشد، بخشی از بدنه کلاس محسوب می شود:

class Car:
   pass

توجه: نام کلاس های پایتون باید به شکل CapitalizedWords نوشته شده است. به عنوان مثال، MySedanCar

 

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

 


 

# ایجاد آبجکت از یک کلاس در پایتون

یک آبجکت یا شی نمونه ای از یک کلاس است. ما می توانیم از کلاس Car که در بالا تعریف شده استفاده کرده و از آن برای ایجاد یک شی یا نمونه استفاده کنیم. برای ساخت یک آبجکت از کلاس کافیست کلاس مورد نظر را در یک متغیر ذخیره کنید. به ساخت آبجکت از یک کلاس instantiating میگویند. نام آبجکت هر چیزی میتواند باشد اما سعی کنید نامی معنی دار انتخاب کنید. آبجکت‌ها میتوانند به تمام اطلاعاتی که در کلاس وجود دارند دسترسی کامل داشته باشند.

 

ما یک شیء Car به نام benz خواهیم ساخت:

benz = Car()
benz.price = 800

print(benz.price)

 

آبجکت benz که از کلاس Car ایجاد کردیم، میتواند به تمام اطلاعاتی که در کلاس Car وجود دارد،‌ دسترسی پیدا کرده و حتی تغییر دهد. همانطور که در کد بالا میبینید، توانستیم با روش نقطه گذاری(dot notation) مقدار price را در آبجکت benz برابر با 800 قرار دادیم. در آخر توانستیم به مقدار price از آبجکت benz دسترسی پیدا کنیم.

 


 

# ساخت متد در شی گرایی پایتون

متد به فانکشن‌هایی گفته میشود که درون یک کلاس قرار دارند. هر متد وظیفه انجام کار مشخصی را دارد. متدها رفتارهای یک کلاس هستند که آبجکت‌ها میتوانند از آنها برای کار روی داده‌های خود استفاده کنند. برای فراخوانی متدها باید از آبجکتی که از کلاس ساخته اید استفاده کنید. در کد پایین یک متد به نام drive در کلاس Car ایجاد کرده‌ایم.

class Car:
    def drive(self):
        print('i drive a car')

a = Car()
a.drive()


# OUTPUT
i drive a car

 

در کد بالا بعد از ساختن متد drive، یک آبجکت از کلاس Car به نام a ایجاد کرده‌ایم. سپس توانستیم با آبجکت a به متد drive دسترسی داشته باشیم.

 


 

# کلمه self در متد پایتون

زمانی که در پایتون یک متد میسازید اولین آرگومانی که باید به آن متد بدهید کلمه کلیدی self میباشد. کلمه self به خود آبجکت اشاره میکند که به شما امکان میدهد به attributeها و بقیه ویژگی‌ها دسترسی داشته باشید. مثلا در کد پایین که با آبجکت a متد drive را صدا میزنیم به طور اتوماتیک آبجکت a به عنوان کلمه self به داخل متد ارسال میشود.

برای درک بهتر این موضوع پیشنهاد میکنیم ویدیو بعدی، توضیح method در پایتون را ببینید. در این ویدیو به طور کامل توضیح دادیم که چطور کلمه self استفاده میشود.

class Car:
    def drive(self):
        print('i drive a car')

a = Car()
a.drive()

 

# متد init پایتون

در این بخش می‌آموزید که چطور از متد __init__ برای مقداردهی اولیه آبجکت‌ها در شی گرایی پایتون استفاده کنید. هنگامی که یک آبجکت از کلاس را ایجاد می کنید، پایتون به طور خودکار متد __init__() را برای مقداردهی اولیه attributeهای آبجکت فراخوانی می کند.

 

بر خلاف متدهای معمولی، متد init دارای دو underscore در اطراف آن است که نشان دهنده خاص بودن این متد دارد. به متدهایی که قبل و بعد از نام ‌آنها دو underscore وجود داشته باشد، dunder گفته میشود. پس متد init به شکل dunder init خوانده میشود.

class Car:
    def __init__(self, name):
        self.name = name

    def show(self):
        print(self.name)


a = Car('benz')
a.show()

# OUTPUT
benz

 

زمانی که در کد بالا، از کلاس Car یک آبجکت ایجاد کردیم، مقدار benz را مستقیما به کلاس Car ارسال کردیم. که این مقدار به عنوان name در متد __init__ قرار میگیرد.


 

ویدیو مرتبط: ویدیو آموزش وراثت در پایتون

# وراثت(inheritance) از کلاسی دیگر در پایتون

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

class Car:
	def show(self):
		print('Nice Car...')
		
class Benz(Car):
	pass

a = Benz()
a.show()

# OUTPUT
Nice Car...

در کد بالا، در داخل کلاس Car یک متد به نام show داریم که جمله Nice Car را چاپ میکند. در پایین‌تر، کلاس Benz را ساخته‌ایم که از کلاس Car ارثبری میکند. در این حالت کلاس Benz میتواند به تمام اطلاعاتی که در کلاس Car وجود دارد، دسترسی پیدا کند.

 

در این مثال به کلاس Car، کلاس والد یا Super-class گفته میشود و به کلاس Benz، کلاس فرزند یا Sub-class گفته میشود.


 

# بازنویسی متدهای کلاس والد در پایتون

در این بخش، شما یاد خواهید گرفت که چگونه از روش override پایتون استفاده کنید تا به یک کلاس فرزند اجازه دهید پیاده سازی خاصی از یک متد را که توسط یکی از کلاس های والد آن ارائه شده است، تغییر دهد. در زمانی که متد‌های ارائه شده در کلاس والد مناسب کلاس فرزند نباشد، میتوانید متدی که در کلاس والد وجود دارد را در کلاس فرزند بازنویسی کنید.

class Car:
	def show(self):
		print('Nice Car...')

class Benz(Car):
	def show(self):
		print('Nice Benz...')

a = Benz()
a.show()

# OUTPUT
Nice Benz...

 

همانطور که در کد میبینید، متد show که در کلاس Car وجود داشت مناسب کلاس Benz نبود. پس داخل کلاس Benz یک متد دقیقا همنام با متد show ساختیم که متد Car را بازنویسی کند. بعد از اجرا فقط متدی که در کلاس فرزند وجود دارد اجرا خواهد شد.


 

# متد super در پایتون

در این آموزش، نحوه استفاده از متد super() پایتون را برای تفویض اختیار به کلاس والد هنگام بازگرداندن متدها یاد خواهید گرفت. در زمان بازنویسی متدهای کلاس پدر، فقط عملکردی که در کلاس فرزند وجود دارد اجرا خواهد شد. اما ممکن است نیاز داشته باشید که متدی که در کلاس پدر وجود دارد نیز در کنار متد کلاس فرزند اجرا شود. در این حالت میتوانید از متد super پایتون استفاده کنید که وظیفه صدا زدن متد پدر را دارد.

class Car:
	def show(self):
		print('Nice Car...')

class Benz(Car):
	def show(self):
		super().show()
		print('Nice Benz...')

a = Benz()
a.show()

# OUTPUT
Nice Car...
Nice Benz...

 

در کد بالا با استفاده از متد super پایتون مشخص کردیم که متد show که در کلاس Car وجود دارد نیز باید در کنار show کلاس Benz اجرا شود.


 

ویدیو مرتبط: ویدیو آموزش کلاس های abstract در پایتون

# کلاس‌های انتزاعی(abstract) در پایتون

در این آموزش، با کلاس های انتزاعی پایتون و نحوه استفاده از آن برای ایجاد یک طرح اولیه برای کلاس های دیگر آشنا خواهید شد. در برنامه نویسی شی گرا، کلاس انتزاعی کلاسی است که نمیتوانید از آن آبجکتی ایجاد کنید. با این حال، می توانید کلاس هایی ایجاد کنید که از یک کلاس انتزاعی به ارثبری میکنند. به طور معمول، شما از یک کلاس انتزاعی برای ایجاد طرحی برای کلاس های دیگر استفاده می کنید. به طور مشابه، متد انتزاعی متدی بدون پیاده سازی است. یک کلاس انتزاعی ممکن است شامل متدهای انتزاعی باشد یا نباشد.

 

پایتون مستقیماً از کلاس های انتزاعی پشتیبانی نمی کند. اما ماژولی ارائه می دهد که به شما امکان می دهد کلاس های انتزاعی را تعریف کنید. برای تعریف یک کلاس انتزاعی، از ماژول abc استفاده می کنید. ماژول abc زیرساختی را برای تعریف کلاس های پایه انتزاعی در اختیار شما قرار می دهد.

from abc import ABC, abstractmethod

class Car(ABC):
	@abstractmethod
	def show(self):
		pass

class Benz(Car):
	def show(self):
		print('Nice Benz...')

a = Benz()
a.show()

# OUTPUT
Nice Benz

 

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


5:47:36


0

پایتون چیست؟

10:38

رایگان

11

آموزش tuple در پایتون

8:29

رایگان

12

آموزش set در پایتون

7:47

رایگان

18

توضیح scope در پایتون

6:25

رایگان

20

توضیح method در پایتون

20:19

رایگان


دوره‌های پیشنهادی

دوره اول آموزش جنگو(django)

دوره اول آموزش جنگو(django)

دوره آموزش تست نویسی در پایتون

دوره آموزش تست نویسی در پایتون

دوره آموزش کار با celery در جنگو

دوره آموزش کار با celery در جنگو

ارسال نظر

تلاش میکنم سوالات شما را در کمتر از یک روز پاسخ بدم

ooo

October 2021

جناب من تو یوتیوب خیلی چرخیدم اما واقعا از شما راحت یاد گرفتم، خدا خیرتون بده و برکت.

ارسال نظر