وراثت در پایتون

May 2022


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

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

 

این آموزش برخی از جنبه های اصلی وراثت در پایتون را مورد بررسی قرار می دهد ، از جمله نحوه کار کلاس های والد و کلاس های فرزند، نحوه بازنویسی روش ها و ویژگی ها، نحوه استفاده از 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

 


5:47:36


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

رایگان


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

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

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

دوره ساخت وبلاگ با فلسک

دوره ساخت وبلاگ با فلسک

دوره آموزش ردیس(redis)

دوره آموزش ردیس(redis)

ارسال نظر

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

حامد

April 2022

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

ارسال نظر


حسن

April 2022

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

ارسال نظر


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

April 2022

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

علي

December 2021

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

ارسال نظر


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

December 2021

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

carnival

December 2021

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

ارسال نظر