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

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

 

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

 

برنامه نویسی شی گرا به اختصار 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 آبجکت بسازیم زیرا این کلاس به خودی خود کاری انجام نمیدهد، فقط مشخص میکند که کلاس‌های دیگر باید چطور باشند.



0

Intro

10:38

رایگان

1

Variable

12:30

رایگان

2

String

19:22

رایگان

3

List

8:46

رایگان

4

While

9:6

رایگان

5

If

8:37

رایگان

6

For

6:12

رایگان

7

range

4:17

رایگان

8

break, continue, pass

9:15

رایگان

9

Function

12:32

رایگان

10

List methods

12:11

رایگان

11

Tuple

8:29

رایگان

12

Set

7:47

رایگان

13

Dictionary

9:19

رایگان

14

Module

10:40

رایگان

15

fstring

5:35

رایگان

16

format

7:34

رایگان

17

File

17:14

رایگان

18

Scope

6:25

رایگان

19

OOP

12:15

رایگان

20

Method

20:19

رایگان

21

class/instance variable

14:7

رایگان

22

class/static method

13:25

رایگان

23

Inheritance

17:6

رایگان

24

Special methods

9:50

رایگان

25

Access points

11:12

رایگان

26

property

6:54

رایگان

27

Exceptions

21:17

رایگان

28

Standard library

12:51

رایگان

29

Docstring

10:49

رایگان

30

Virtualenv

11:2

رایگان

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

دوره آموزش ساخت Forum با فلسک
دوره آموزش ساخت Forum با فلسک
تکمیل ضبط
امیرحسین بیگدلو
دوره آموزش دیتابیس Neo4j
دوره آموزش دیتابیس Neo4j
تکمیل ضبط
امیرحسین بیگدلو
دوره آموزش CBV در جنگو
دوره آموزش CBV در جنگو
تکمیل ضبط
امیرحسین بیگدلو



ارسال نظر


tahery

2 هفته قبل پاسخ به نظر

سلام و خدا قوت
عالی بود من در مقایسه با سایر ویدیوهای موجود در سایت ها شما بسیار عالی و از همه مهمتر با جزئیات توضیح می دادید. بی نهایت سپاسگذارم

ارسال نظر



گشانی

2 هفته قبل پاسخ به نظر

سپاس فراوان.......

ارسال نظر



سعید امینی

7 ماه قبل پاسخ به نظر

واقعا خیلی ممنون عالی بود
کوتاه منظم و مفید
تشکر

ارسال نظر



naeges

9 ماه قبل پاسخ به نظر

سلام واقعا اموزش تون مفید بود برام ساده و قابل فهم متشکرم

ارسال نظر



alirayzaw

1 سال قبل پاسخ به نظر

من داشتم آموزش پایتون میدیدم جای دیگه بعد رسیدم به این مبحث!
هر کاری میکردم مطلب برام ناقص جا میوفتاد!
انقدر گشتم ولی چاره ساز نبود!
بعد که اینجا رو پیدا کردم به بهترین حالت یاد گرفتم!
پس میبینید که روش انتقال مطلب چقدر اهمیت بالایی داره!
من نه هوشم پایینه نه گیراییم ضعیفه ولی واقعا روش انتقال خوب تاثیر عالی میذاره!
همون طور که روش انتقال ضعیف باعث عدم گیرایی کامل میشه!

ارسال نظر



امیرحسین بیگدلو

1 سال قبل

سلام
خوشحال شدم که مطلب براتون مفید بوده

مرتضی

1 سال قبل پاسخ به نظر

روش انتقال موضوع به صورت functional و عالی انجام شده.
بسیار سپاسگذارم
زنده باشین

ارسال نظر



Amir

1 سال قبل پاسخ به نظر

بلد بودن یک موضوع با بلد بودن چگونگی انتقال موضوع دو بحث متفاوت هست . من با وجود اینکه انگلیسی هم بلدم توی you tube
نتونستم اموزش شی گرایی رو یاد بگیرم . ممنون از سایت mongard

ارسال نظر



نگبن

2 سال قبل پاسخ به نظر

خدا خیرت بده
بالاخره فهمیدم شی گرایی رو، چه قدر ساده ش کردین
به جز ساخت ماشین یه مثال جالب دیگه ام میشه زد
بگیم ما کارخونه آدم سازی داریم
کلاس آدم
نمونه سازی ام که می‌خوایم بکنیم از اون کلاسه اسمش رو بذاریم زن و مرد
توی اون جزئیات هم اسم دخترونه و پسرونه بذاریم یا ویژگی های زنونه و مردونه

ارسال نظر



ali naseri

2 سال قبل پاسخ به نظر

دم شما گرم . بسیار عالی توضیح دادید .

ارسال نظر



mashk

2 سال قبل پاسخ به نظر

سلام خدا خیرت دهاد
توان بیان لب مطلب هم استعدادیه که همه ندارن
درگیر این بودم که کلاس چیه و بینی و بین الله این ویدئوی چند دقیقه ای بدون کش دادن و رفتن تو حاشیه های پرحاشیه روشنم کرد
متشکرم

ارسال نظر



ooo

3 سال قبل پاسخ به نظر

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

ارسال نظر



مونگارد