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