Loading AI tools
از ویکیپدیا، دانشنامه آزاد
وراثت در برنامهنویسی شبیه وراثت بیولوژیکی است که در آن فرزندان صفاتی را از والدین به ارث میبرند. در برنامهنویسی شیءگرا میتوان با وراثت از کلاس موجود کلاسی را ایجاد کرد که دادهها و متدهای کلاس قبلی را به ارث ببرد. برای فرزند یک کلاس میتوان توابع و متغیرهای جدید تعریف کرد یا توابع مربوط به والد را دوبارهنویسی (override) نمود [۱].
وراثت در برنامهنویسی شیءگرا به روشهای مختلفی پیادهسازی میشود که هرکدام کاربردها و ویژگیهای خاص خود را دارند. در ادامه، انواع وراثت و توضیحات مرتبط ارائه میشود:
در وراثت تکسطحی، یک کلاس فرزند تنها از یک کلاس والد ارثبری میکند. این سادهترین نوع وراثت است و برای انتقال خصوصیات و رفتارها از یک کلاس به کلاس دیگر استفاده میشود.
مثال در Python:
class Parent:
def greet(self):
print("Hello from Parent")
class Child(Parent):
pass
child = Child()
child.greet() # خروجی: Hello from Parent
ویژگیها:
در این نوع، یک کلاس از کلاسی ارثبری میکند که خودش از کلاس دیگری ارثبری کرده است. این ساختار بهصورت سلسلهمراتبی ادامه پیدا میکند.
مثال در Python:
class Grandparent:
def greet(self):
print("Hello from Grandparent")
class Parent(Grandparent):
pass
class Child(Parent):
pass
child = Child()
child.greet() # خروجی: Hello from Grandparent
ویژگیها:
در وراثت چندگانه، یک کلاس میتواند از چندین کلاس والد ارثبری کند. این نوع وراثت گاهی منجر به مشکلاتی مانند مسئله الماس (Diamond Problem) میشود.
مثال در Python:
class Parent1:
def greet(self):
print("Hello from Parent1")
class Parent2:
def greet(self):
print("Hello from Parent2")
class Child(Parent1, Parent2):
pass
child = Child()
child.greet() # خروجی: Hello from Parent1 (اولویت با Parent1 است)
ویژگیها:
وراثت ترکیبی ترکیبی از انواع مختلف وراثت (تکسطحی، چندسطحی و چندگانه) است. این نوع وراثت برای استفاده از مزایای انواع مختلف وراثت استفاده میشود.
مثال در Python:
class Base:
def greet(self):
print("Hello from Base")
class Parent1(Base):
pass
class Parent2(Base):
pass
class Child(Parent1, Parent2):
pass
child = Child()
child.greet() # خروجی: Hello from Base
ویژگیها:
در این نوع وراثت، چند کلاس فرزند از یک کلاس والد مشترک ارثبری میکنند.
مثال در Python:
class Parent:
def greet(self):
print("Hello from Parent")
class Child1(Parent):
pass
class Child2(Parent):
pass
child1 = Child1()
child2 = Child2()
child1.greet() # خروجی: Hello from Parent
child2.greet() # خروجی: Hello from Parent
ویژگیها:
مسئله الماس یکی از چالشهای رایج در وراثت چندگانه است. این مسئله زمانی رخ میدهد که دو کلاس والد از یک کلاس اصلی ارثبری کنند و یک کلاس فرزند بخواهد از هر دو والد ارثبری کند.
حل این مسئله در Python با استفاده از MRO (Method Resolution Order):
class A:
def greet(self):
print("Hello from A")
class B(A):
pass
class C(A):
pass
class D(B, C):
pass
d = D()
d.greet() # خروجی: Hello from A (بر اساس ترتیب MRO)
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.