ارث بری یکی از مفاهیم اساسی در برنامهنویسی شیءگرا است که به توسعهدهندگان امکان میدهد کلاسها را به یکدیگر وابسته کرده و به اشتراکگذاری ویژگیها و رفتارها بین آنها اقدام کنند. در این مقاله به بررسی ارث بری در پایتون خواهیم پرداخت و نحوه استفاده از آن را به همراه مثالهای عملی بررسی خواهیم کرد.
باتوجه به اینکه زبان پایتون یکی از جذاب ترین و پرمخاطب ترین زبان های برنامه نویسی در جهان محسوب میشود، با کمک آموزش زبان برنامه نویسی پایتون قادر خواهید بود در حوزههای مختلف برنامه نویسی مثل برنامه نویسی وبسایت و هوش مصنوعی مشغول به فعالیت شوید و به کسب درآمد پردازید. در دوره آموزش پایتون دانشجویار، با دنیای جذاب و پرطرفدار برنامهنویسی پایتون آشنا میشوید.این دوره شامل مفاهیم مقدماتی تا موارد پیشرفته پایتون را پوشش میدهد تا شما را به عنوان یک برنامهنویس حرفهای تربیت کند.
مفاهیم پایه ارث بری در پایتون
در ارث بری، دو نوع کلاس به صورت والد (پدر) و فرزند (فرزند) تعریف میشوند. والد کلاس، ویژگیها و رفتارهای اصلی را تعریف کرده و فرزند کلاسها میتوانند این ویژگیها را به ارث ببرند و یا آنها را تغییر دهند. انواع ارث بری شامل ارث بری تکی، ارث بری چندگانه، و ارث بری چندسطحی هستند.
انواع ارث بری در پایتون
- وراثت یگانه:زمانی که یک کلاس فرزند فقط از یک کلاس والد ارث بری دارد، به آن وراثت یگانه یا وراثت تک گفته می شود. که مثال آن را در بالا دیدیدم.
- وراثت چند گانه: در ارث بری پایتون، وقتی یک کلاس فرزند از چندین کلاس والد ارث بری داشته باشد، به آن وراثت چندگانه می گویند.
بر خلاف جاوا، پایتون چندین وراثت را نشان می دهد.
# Python example to show the working of multiple
# inheritance
class Base1(object):
def __init__(self):
self.str1 = “Geek1”
print(“Base1”)
class Base2(object):
def __init__(self):
self.str2 = “Geek2”
print(“Base2”)
class Derived(Base1, Base2):
def __init__(self):
# Calling constructors of Base1
# and Base2 classes
Base1.__init__(self)
Base2.__init__(self)
print(“Derived”)
def printStrs(self):
print(self.str1, self.str2)
ob = Derived()
ob.printStrs()
خروجی این کد به شکل زیر است:
Base1
Base2
Derived
Geek1 Geek2
- وراثت چند سطحی: این نوع از وراثت در پایتون زمانی رخ می دهد که رابطه فرزند و نوه وجود داشته باشد.
# A Python program to demonstrate inheritance # Base or Super class. Note object in bracket.# (Generally, object is made ancestor of all classes)# In Python 3.x “class Person” is# equivalent to “class Person(object)”class Base(object): # Constructor def __init__(self, name): self.name = name # To get name def getName(self): return self.name # Inherited or Sub class (Note Person in bracket)class Child(Base): # Constructor def __init__(self, name, age): Base.__init__(self, name) self.age = age # To get name def getAge(self): return self.age # Inherited or Sub class (Note Person in bracket)class GrandChild(Child): # Constructor def __init__(self, name, age, address): Child.__init__(self, name, age) self.address = address # To get address def getAddress(self): return self.address # Driver codeg = GrandChild(“Geek1”, 23, “Noida”) print(g.getName(), g.getAge(), g.getAddress())
که خروجی این کد عبارت زیر است:
Geek1 23 Noida
- وراثت سلسله مراتبی: این نوع از ارث بری در پایتون، به گونه ای است که بیش از یک کلاس مشتق شده از یک پایه واحد ایجاد می شود.
- وراثت ترکیبی: در نوع دیگر از وراثت در پایتون، وراثت ترکیبی را داریم. این شکل بیش از یک شکل ارث را ترکیب می کند. اساسا، این ترکیبی بیش از یک نوع ارث است.
نحوه پیادهسازی ارث بری در پایتون
در پایتون، برای ایجاد والد و فرزند کلاسها از کلمهکلیدی `class` استفاده میشود. برای وراثت ویژگیها و روشها از متد `super()` استفاده میشود که به فرزند اجازه میدهد ویژگیها و روشهای والد کلاس را استفاده کند و در صورت نیاز آنها را تغییر دهد.
class BaseClass:
Body of base class
class DerivedClass(BaseClass):
Body of derived class
مزایای استفاده از ارث بری
استفاده از ارث بری در برنامهنویسی پایتون دارای مزایای بسیاری است. این مزایا در تصویر زیر ذکر شده است.
مثالهای واقعی از ارث بری در پایتون
برای بهترین درک از کاربرد ارث بری، میتوانیم به مثالهای واقعی نگاه کنیم. فرض کنید که میخواهیم سلسلهمراتبی از وسایل نقلیه ایجاد کنیم. اینجاست که ارث بری به ما کمک میکند:
class Polygon:
def __init__(self, no_of_sides):
self.n = no_of_sides
self.sides = [0 for i in range(no_of_sides)]
def inputSides(self):
self.sides = [float(input(“Enter side “+str(i+1)+” : “)) for i in range(self.n)]
def dispSides(self):
for i in range(self.n):
print(“Side”,i+1,”is”,self.sides[i])
الگوهای پیشرفته ارث بری
علاوه بر ارث بری ساده، در پایتون میتوان از الگوهای پیشرفتهتری مانند کلاسهای پایه انتزاعی (ABCs) و کلاسهای mixin استفاده کرد. این الگوها به ما امکان ایجاد ساختارهای پیچیدهتر و قابل تعمیم را میدهند.
ارث بری در مقابل ترکیب
در مواقعی، بهتر است از ترکیب (Composition) به جای ارث بری استفاده کنیم. به عبارت دیگر، وقتی که یک کلاس نیاز به چندین کلاس ویژگی دارد، به جای ارث بری، از ترکیب آن کلاسها استفاده کنیم.
نتیجهگیری
ارث بری یکی از مفاهیم اساسی در برنامهنویسی پایتون است که امکان به اشتراکگذاری ویژگیها و رفتارها بین کلاسها را فراهم میکند. با استفاده از ارث بری، کد قابلیت استفاده مجدد بیشتری دارد و سازماندهی بهتری خواهد داشت.
پرسشهای متداول
- هدف اصلی از استفاده از ارث بری در پایتون چیست؟
ارث بری در پایتون به توسعهدهندگان امکان میدهد کلاسها را به یکدیگر وابسته کنند و ویژگیها و رفتارها را به اشتراک بگذارند. این امر به کد نویسی مجدد و افزایش قابلیت استفاده مجدد کد کمک میکند.
- چگونه میتوان یک متد از کلاس والد را بازنویسی کرد؟
با استفاده از ارث بری، میتوانید متدهای کلاس والد را در کلاس فرزند بازنویسی کنید. برای این کار، متد مورد نظر را با نام مشابه در کلاس فرزند تعریف کنید و اطلاعات خود را به دلخواه تغییر دهید.
- آیا یک کلاس میتواند از چندین کلاس والد بهره ببرد؟
بله، در پایتون یک کلاس میتواند از چندین کلاس والد بهره ببرد. این مفهوم به عنوان ارث بری چندگانه شناخته میشود. با ارث بری چندگانه، یک کلاس میتواند ویژگیها و رفتارهای مختلفی را از چندین کلاس والد به ارث ببرد.
- مشکل الماسی در ارث بری پایتون چیست؟
مشکل الماسی در ارث بری وقتی پیش میآید که یک کلاس از دو کلاس والد بهره میبرد که خود از یک کلاس والد مشترک بهره میبرند. این مشکل باعث ابهام در توریث و مدیریت متدها میشود.
- در چه مواردی از ترکیب به جای ارث بری در پایتون استفاده میشود؟
در برخی موارد، به جای استفاده از ارث بری، از ترکیب (Composition) استفاده میشود. این به معنای داشتن یک کلاس درون دیگری و استفاده از ویژگیها و رفتارها به عنوان اجزاء میباشد. ترکیب به ما امکان مدیریت بهتر وابستگیها و جلوگیری از مشکلات الماسی را میدهد.