در این ویدیو مبحث ارثبری در شی گرایی پایتون آموزش داده میشود. بعد از این ویدیو پیشنهاد میکنیم ویدیو آموزش وراثت چندگانه در پایتون را مشاهده کنید.

برنامه نویسی شی گرا الگوهای کد قابل استفاده مجدد را برای محدود کردن کد تکراری در پروژه را  ایجاد می کند. یکی از راه های دستیابی برنامه نویسی شی گرا به کد قابل استفاده مجدد، ارثبری است، زمانی که یک کلاس فرزند می تواند از کد کلاس دیگر استفاده کند.

 

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

 


 

# وراثت چیست؟

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

 

کلاسهای فرزند که child class یا subclass نامیده می شوند، متدها و متغیرها را از کلاسهای والد که parent class یا base class نامیده میشوند به ارث می برند.

 


 

# کلاس والد

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

 

در کد پایین یک کلاس به نام Animal ایجاد کرده‌ایم که نقش کلاس والد را برای ما بازی خواهد کرد. در این کلاس یک متد به نام greet ساخته‌ایم که یک جمله را چاپ میکند:

class Animal:
    def greet(self):
        print('i am animal')


 

# کلاس‌ فرزند

 

کلاس فرزند کلاس هایی هستند که از کلاس والد به ارث می رسند. این بدان معناست که هر کلاس فرزند قادر خواهد بود از متدها و متغیرهای کلاس والد استفاده کند.

 

در کد پایین یک کلاس به نام Dog نوشتیم که از کلاس Animal ارثبری میکند. در این حالت کلاس فرزند میتواند از متد greet استفاده کند:

class Dog(Animal):
	pass


d = Dog()
d.greet()

# i am animal

 


 

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

متد‌ها و متغیرهایی که از کلاس والد به ارث میرسند همیشه مطلوب ما نیستند. گاهی نیاز داریم که رفتار متدها و متغیرها را تغییر دهیم. در این حالت میتوانیم آنها را بازنویسی یا اصطلاحا overwrite کنیم. برای اینکار فقط کافیست متد یا متغیر را دوباره در کلاس فرزند ایجاد کنیم:

class Dog(Animal):
	def greet(self):
		print('i am dog')


d = Dog()
d.greet()

# i am dog

 

# فانکشن super

با تابع super()، می توانید به متدهای ارثی که در یک شیء کلاس رونویسی شده اند دسترسی پیدا کنید.

 

وقتی از تابع super () استفاده می کنیم، از متد والد داخل متد فرزند استفاده می کنیم. به عنوان مثال، ممکن است بخواهیم یک جنبه از متد والد را با قابلیت های خاص بازنویسی کنیم، اما سپس بقیه متد اصلی والد را فراخوانی کنیم تا متد تمام شود.

 

مثلا در کد پایین، داخل متد greet فرزند با استفاده از کلمه super میتوانیم متد greet والد را صدا بزنیم:

class Animal:
	def greet(self):
		print('i am animal')


class Dog(Animal):
	def greet(self):
		super().greet()
		print('i am dog')


d = Dog()
d.greet()

# i am animal
# i am dog

 



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 با فلسک
تکمیل ضبط
امیرحسین بیگدلو
دوره آموزش Multi Processing در پایتون
دوره آموزش Multi Processing در پایتون
تکمیل ضبط
امیرحسین بیگدلو
دوره آموزش asyncio در پایتون
دوره آموزش asyncio در پایتون
تکمیل ضبط
امیرحسین بیگدلو



ارسال نظر


mohammadho3ein

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

great,thank you so much

ارسال نظر



محمدصالح رستمی

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

تشکر مهربان

ارسال نظر



alireza

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

معرکه و عاااالی

ارسال نظر



بهار

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

تا حالا آموزشی به این خوبی برای پایتون ندیده بودم. ممنون از شما.

ارسال نظر



پارسا

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

بسیار کاربردی و عالی. خسته نباشید.

ارسال نظر



حامد

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

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

ارسال نظر



حسن

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

سلام آقای بیگدلوی عزیز
ممنون از توضیحات خیلی خوبی که میدین و چقدر خوب که پله به پله و اینقدر ساده و روان هر بخش توضیح میدین که هر کسی مثل من که اصلاً با کدنویسی آشنا نبوده توسط شما خیلی خوب یاد میگیره ، فقط اینکه یه سوال داشتم آخر ویدئو شما فانکشن__init__رو کپی کردین اوردین پایین از متد()super هم که برای استفاده از کدهای کلاس پدر استفاده کردین فقط آخرش شما run رو نزدین که اجرا بشه ببینیم چه طوری باید اجراش کنیم چون من هر کاری کردم نتونستم sunclass رو اجرا کنم ، ممنون میشم بفرمایید که برای اجرا کردنش چه کار باید کنم؟؟؟

ارسال نظر



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

2 سال قبل

سلام
خب شما باید از کلاس Motor یک آبجکت بسازید:
m1 = Moto('Honda' , 'no')

علي

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

استاد
super رو كي return مي كنيم كي بدون return مي نويسيم ؟
من هر دوتاش رو ديدم ولي نفهميدم كدوم برا چيه ..

ارسال نظر



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

2 سال قبل

هر وقت لازم شد return کن

carnival

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

سلام خسته نباشی
کارت عالیه فقط یکم علمی تر صحبت کن منظورم اینه که اینقدر ساااده و ... نگو که از اول مفهوم دقیق رو بفهمیم و کاربرد هارو بیشتر توضیح بده
مرسی

ارسال نظر



مونگارد