صفحه اصلی / دوره‌های آموزشی / آموزش پایتون از مقدماتی تا متوسط / آموزش وراثت در پایتون، نکات جامع ارث بری در پایتون

آموزش وراثت در پایتون، نکات جامع ارث بری در پایتون

آموزش وراثت در پایتون، نکات جامع ارث بری در پایتون
براي خريد اين درس نياز است وارد سايت شويد. در صورت نداشتن حساب کاربري عضو شويد.
81,000 تومان

جلسات دوره


                                        
مهدی عباسی
مدرس:

مهدی عباسی

18 سال سابقه برنامه‌نویسی و تدریس برنامه‌نویسی
کسب مقام‌های اول و دوم کشوری در مسابقات برنامه‌نویسی

مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و .... مشاهده رزومه

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

در این درس از آموزش پایتون به مبحث مهم و کاربردی وراثت در پایتون خواهیم پرداخت، در حقیقت وراثت، توانایی یک کلاس برای استخراج یا به ارث بردن خواص از کلاس دیگر است. مزایای ارث بری در  در پایتون عبارتند از:

  1. این روابط دنیای واقعی را به خوبی نشان می دهد.
  2. وراثت در پایتون قابلیت استفاده مجدد از یک کد را فراهم می کند. ما مجبور نیستیم دوباره و دوباره همان کد ها را بنویسیم. همچنین، وراثت در پایتون به ما این امکان را می دهد تا ویژگی های بیشتری را به یک کلاس، بدون تغییر آن اضافه کنیم.
  3. وراثت در پایتون دارای ماهیت گذراست، به این معنا که اگر کلاس B از کلاس A دیگری ارث ببرد، آنگاه تمام زیر کلاس های B به طور خودکار از کلاس A به ارث می برند.

در زیر یک مثال ساده از وراثت در پایتون را آورده ایم:

# 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 Person(object):
      
    # Constructor
    def __init__(self, name):
        self.name = name
  
    # To get name
    def getName(self):
        return self.name
  
    # To check if this person is an employee
    def isEmployee(self):
        return False
  
  
# Inherited or Subclass (Note Person in bracket)
class Employee(Person):
  
    # Here we return true
    def isEmployee(self):
        return True
  
# Driver code
emp = Person("Geek1")  # An Object of Person
print(emp.getName(), emp.isEmployee())
  
emp = Employee("Geek2") # An Object of Employee
print(emp.getName(), emp.isEmployee())

خروجی این قطعه کد به صورت زیر است:

Geek1 False
Geek2 True

کلاس شی چیست؟

مانند کلاس شی در java، در پایتون (از نسخه 3)، شی، ریشه همه کلاس ها می باشد. در نسخه3 پایتون، "class Test(object)" و "class Test" یکی هستند. در نسخه 2 پایتون، "class Test(object)" یک کلاس با شی به عنوان والد، به نام کلاس با سبک جدید و "class Test" کلاسی به سبک قدیمی و بدون شی والد ایجاد می کند.

زیر کلاس یا کلاس فرزند

ساختار وراثت در پایتون به این گونه است که یک کلاس فرزند باید تشخیص دهد کدام کلاس، کلاس والدش می باشد. این کار را می توان با ذکر نام کلاس والد در تعریف کلاس فرزند انجام داد.
به عنوان مثال:

# Python code to demonstrate how parent constructors
# are called. 
# parent class
class Person( object ):   
 
        # __init__ is known as the constructor        
        def __init__(self, name, idnumber):  
                self.name = name
                self.idnumber = idnumber
        def display(self):
                print(self.name)
                print(self.idnumber)
 
# child class
class Employee( Person ):          
        def __init__(self, name, idnumber, salary, post):
                self.salary = salary
                self.post = post
 
                # invoking the __init__ of the parent class
                Person.__init__(self, name, idnumber)
 
                 
# creation of an object variable or an instance
a = Employee('Rahul', 886012, 200000, "Intern")   
 
# calling a function of the class Person using its instance
a.display()

خروجی این قطعه کد به صورت زیر است:

Rahul
886012

به مثال زیر توجه کنید:
نمونه ای است که برای کلاس person ایجاد شده است. ()__init__ کلاس ارجاع شده را فراخوانی می کند. می توانید شی را که در اعلان کلاس person نوشته شده است را ببینید.
وراثت در پایتون به این صورت است که هر کلاس از یک کلاس داخلی پایه به نام شی ارث می برد. سازنده، یعنی تابع '__init__' یک کلاس زمانی فراخوانی می شود که یک متغیر شی یا نمونه ای از کلاس را ایجاد می کنیم.
متغیر های تعریف شده در ()__init__ به عنوان متغیر های نمونه یا اشیا نامیده می شوند. بنابر این، "name" و "idnumber" اشیا کلاس person هستند. به طور مشابه، "salary" و "post" اشیا کلاس Employee هستند. از آن جایی که Employee از کلاس person ارث می برد، «name» و «idnumber» نیز اشیا کلاس Employee هستند.
اگر فراموش کنید ()__init__ کلاس والد را فراخوانی کنید، متغیر های نمونه آن برای کلاس فرزند در دسترس نیستند.
کد زیر به همین دلیل یک خطا ایجاد می کند.

# Python program to demonstrate error if we
# forget to invoke __init__() of the parent.
 
class A:
      def __init__(self, n = 'Rahul'):
              self.name = n
class B(A):
      def __init__(self, roll):
              self.roll = roll
 
object = B(23)
print (object.name)

خروجی این کد به شکل زیر است:

Traceback (most recent call last):
  File "/home/de4570cca20263ac2c4149f435dba22c.py", line 12, in
    print (object.name)
AttributeError: 'B' object has no attribute 'name'

 اشکال مختلف وراثت در پایتون

1. وراثت یگانه

   

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

2. وراثت چند گانه

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

# 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

3. وراثت چند سطحی

این نوع از وراثت در پایتون زمانی رخ می دهد که رابطه فرزند و نوه وجود داشته باشد.

# 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 code
g = GrandChild("Geek1", 23, "Noida") 
print(g.getName(), g.getAge(), g.getAddress())

که خروجی این کد عبارت زیر است:

Geek1 23 Noida

4. وراثت سلسله مراتبی

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

5. وراثت ترکیبی

در نوع دیگر از وراثت در پایتون، وراثت ترکیبی را داریم. این شکل بیش از یک شکل ارث را ترکیب  می کند. اساسا، این ترکیبی بیش از یک نوع ارث است.

اعضای خصوصی کلاس والد

ما همیشه نمی خواهیم که متغیر های نمونه کلاس والد توسط کلاس فرزند به ارث برده شوند. یعنی می توانیم برخی از متغیر های نمونه کلاس والد را خصوصی کنیم به طوری که برای کلاس فرزند در دسترس نباشد.
ما می توانیم یک متغیر نمونه را با اضافه کردن دستور زیر قبل از نام آن بسازیم. مثلا:

# Python program to demonstrate private members
# of the parent class
class C(object):
       def __init__(self):
              self.c = 21
 
              # d is private instance variable
              self.__d = 42   
class D(C):
       def __init__(self):
              self.e = 84
              C.__init__(self)
object1 = D()
 
# produces an error as d is private instance variable
print(object1.d)

که خروجی این کد به صورت زیر است:

File "/home/993bb61c3e76cda5bb67bd9ea05956a1.py", line 16, in
    print (object1.d)                     
AttributeError: type object 'D' has no attribute 'd'

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

اگر این محتوا را دوست داشتید و از آن استفاده کردید، حتما نظراتتان را با ما به اشتراک بگذارید.
در درس بعدی مبحث چند ریختی در پایتون را آموزش می دهیم. این مبحث بسیار حائز اهمیت است، پس درس بعد را از دست ندهید.

 

نظرات دانشجویان

نظر شما در تصمیم دیگران اثرگذار است.

لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.

برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.
ثبت نام

904