وراثت در برنامه نویسی پایتون

4 سال پیش

وراثت در برنامه نویسی پایتون

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

پیشنهاد ویژه : پکیج آموزش صفر تا صد پایتون

وراثت در برنامه نویسی پایتون

وراثت یک ویژگی قدرتمند در برنامه نویسی شی گرا است.

این به تعریف یک کلاس جدید با کمی تغییر یا تغییر در کلاس موجود اشاره دارد. کلاس جدید را کلاس مشتق شده (یا فرزند) و آن را که از آن به ارث می برد کلاس پایه (یا والد) می نامند.

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

class BaseClass:
  Body of base class
class DerivedClass(BaseClass):
  Body of derived class

 

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

نمونه ای از وراثت در پایتون

برای نشان دادن استفاده از وراثت ، مثالی می زنیم.

Polygon یک شکل بسته با ۳ ضلع یا بیشتر است. ما یک کلاس به نام Polygon داریم که به صورت زیر تعریف شده است

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])

 

این کلاس دارای ویژگی های داده برای ذخیره تعداد اضلاع n و اندازه هر طرف به عنوان لیستی به نام sides است.

متد ()inputSides  اندازه هر طرف را می گیرد و ()dispSides  این طول های کناری را نمایش می دهد.

Triangle یک چند ضلعی با ۳ ضلع است. بنابراین، ما می توانیم یک کلاس به نام مثلث ایجاد کنیم که از Polygon به ارث می برد. این باعث می شود تمام ویژگی های کلاس Polygon در دسترس کلاس Triangle قرار گیرد.

Triangle را می توان به صورت زیر تعریف کرد.

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)

    def findArea(self):
        a, b, c = self.sides
        # calculate the semi-perimeter
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('The area of the triangle is %0.2f' %area)

 

با این حال ، کلاس Triangle برای پیدا کردن و چاپ مساحت مثلث، یک متد جدید ()findArea نیاز دارد. در اینجا یک نمونه اجرا شده است.

>>> t = Triangle()

>>> t.inputSides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4

>>> t.dispSides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0

>>> t.findArea()
The area of the triangle is 6.00

 

می توانیم ببینیم که حتی اگر روشهایی مانند ()inputSides  یا () dispSides را برای کلاس مثلث به طور جداگانه تعریف نکرده باشیم، اما ما قادر به استفاده از آنها هستیم.

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

متد Overriding در پایتون

در مثال بالا، توجه داشته باشید که متد ()__init __ در هر دو کلاس، Triangle و همچنین Polygon تعریف شده است. وقتی این اتفاق می افتد، متد موجود در کلاس مشتق شده، آن را در کلاس پایه لغو می کند. می توان گفت ،() __init __  در Triangle نسبت به __init__ در Polygon اولویت دارد.

به طور کلی هنگام Overriding بر یک روش پایه، ما تمایل داریم تعریف را گسترش دهیم تا اینکه صرفاً جایگزین آن کنیم. همین کار با فراخوانی متد در کلاس پایه از آنچه در کلاس مشتق شده است (فراخوانی() __Polygon .__ init  از() __init __ در Triangle) انجام می شود.

گزینه بهتر استفاده از تابع توکار ()super  است. بنابراین ، (super().__init__(3 معادل (Polygon.__init__(self,3) می باشد و ترجیح داده می شود. ب

برای بررسی وراثت از دو توابع توکار ()isinstance  و ()Issubclass استفاده می شود.

تابع()isinstance  اگر شی نمونه ای از کلاس یا کلاسهای دیگر مشتق شده از آن باشد، True را برمی گرداند. هر کلاس در پایتون از شی کلاس پایه ارث می برد.

>>> isinstance(t,Triangle)
True

>>> isinstance(t,Polygon)
True

>>> isinstance(t,int)
False

>>> isinstance(t,object)
True

 

به همین ترتیب، ()Issubclass  برای بررسی وراثت کلاس استفاده می شود.

>>> issubclass(Polygon,Triangle)
False

>>> issubclass(Triangle,Polygon)
True

>>> issubclass(bool,int)
True

 

منبع.

لیست جلسات قبل آموزش برنامه نویسی پایتون

  1. آموزش نصب و اجرای برنامه نویسی پایتون
  2. کلیدواژه ها و شناسه های برنامه نویسی پایتون
  3. دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
  4. متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون 
  5. انواع داده ها در برنامه نویسی پایتون
  6. تبدیل نوع در برنامه نویسی پایتون
  7. ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
  8. عملگرها در برنامه نویسی پایتون
  9. نام و دامنه در برنامه نویسی پایتون
  10. دستور شرطی if…else در برنامه نویسی پایتون
  11. حلقه for در برنامه نویسی پایتون
  12. حلقه while در برنامه نویسی پایتون
  13. دستورات break و continue در برنامه نویسی پایتون
  14. دستور pass در برنامه نویسی پایتون
  15. توابع در برنامه نویسی پایتون
  16. آرگومان تابع در برنامه نویسی پایتون
  17. تابع بازگشتی در برنامه نویسی پایتون
  18. تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
  19. متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون
  20. کلیدواژه global در برنامه نویسی پایتون
  21. ماژول های برنامه نویسی پایتون
  22. پکیج ها در برنامه نویسی پایتون
  23. اعداد و تبدیل نوع داده در برنامه نویسی پایتون 
  24. لیست در برنامه نویسی پایتون
  25. تاپل در برنامه نویسی پایتون 
  26. رشته ها در برنامه نویسی پایتون
  27. مجموعه ها در برنامه نویسی پایتون
  28. دیکشنری در برنامه نویسی پایتون
  29. عملیات ورودی/خروجی در برنامه نویسی پایتون 
  30. دایرکتوری و مدیریت فایل ها در برنامه نویسی پایتون
  31. خطاها و استثناهای توکار در برنامه نویسی پایتون
  32. مدیریت استثناها در برنامه نویسی پایتون
  33. استثناهای تعریف شده توسط کاربر در برنامه نویسی پایتون
  34. برنامه ‌نویسی شی گرا در پایتون
  35. اشیا و کلاس ها در برنامه نویسی پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه