مهندس موفق الکترونیک

شی‌گرایی در پایتون: کلاس، شی، وراثت و سازنده

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

کلاس چیست؟

یک کلاس یک نوع گروه‌بندی منطقی برای داده‌ها و توابع می‌باشد. کلاس‌ها این آزادی را فراهم می‌کنند تا ساختار داده‌هایی ایجاد کنید که شامل محتویات دلخواه بوده و به سادگی قابل دسترسی باشند.

برای مثال، هر کارمند بانکی که بخواهد جزئیات یک مشتری را به صورات آنلاین بدست بیاورد باید به کلاس customer رجوع کند، که در آن همه جزئیات تراکنشی، جزئیات واریز و دریافت وجه، بدهی‌های واریز نشده و…. لیست خواهند شد.

شی گرایی در پایتون

نحوه تعریف کلاس‌ها در پایتون

برای تعریف یک کلاس باید ملاحظات زیر را درنظر بگیرید.

گام 1) در پایتون، کلاس‌ها با کلیدواژه Class تعریف می‌شوند.

class myClass():

گام 2) درون کلاس‌ها، می‌توان توابع یا متدها را به عنوان بخشی از کلاس تعریف کرد.

def method1 (self):
   print "Guru99"
def method2 (self,someString): 
   print "Software Testing:" + someString
  • در اینجا متد method1 را تعریف کرده‌ایم که عبارت Guru99 را چاپ می‌کند.
  • متد دیگری به نام method2 تعریف کرده‌ایم که عبارت «software Testing”+SomeString”» را چاپ می‌کند. SomeString یک متغیر است که به متد فراخوانده شده ارسال می‌گردد.

گام 3) درست همانند کدهای درون یک تابع،حلقه و … همه چیز در یک کلاس داری تورفتگی است. هرچیزی که دارای تورفتگی نباشد جز کلاس محسوب نمی‌شود.

شی گرایی در پایتون

نکته:  هنگام استفاده ازself  در پایتون:

  • آرگومان self به خود شی ارجاع می‌دهد. بنابراین درون متد، self اشاره به شی نمونه ای دارد که متد در حال عملیات روی آن می‌باشد.
  • Self نام ترجیح داده شده پایتون برای نشان دادن اولین پارامتر متدهای نمونه در پایتون می‌باشد. این واژه بخشی از دستور زبان پایتون برای دسترسی به اعضای اشیا می‌باشد.
مطلب پیشنهادی:  متغیرها در پایتون: اعلان، الحاق، سراسری و محلی

گام 4) برای ایجاد یک شی از کلاس

c = myClass()

گام 5) برای فراخوانی یک متد از یک کلاس

 c.method1()
  c.method2(" Testing is fun")
  • دقت کنید که وقتی method1 یا method2 را فراخوانی می‌کنیم، نیازی به فراهم کردن کیداواژه slef نیست. بلکه به صورت خودکار توسط زمان اجرای (runtime) پایتون فراهم می‌گردد.
  • زمانی که یک متد نمونه از یک شی نمونه را فراخوانی کنید ارسال می‌کند، آرگومان self توسط زمان اجرای پایتون به متد ارسال می‌شود، چه شما آن را فراهم کنید و چه نکنید.
  • شما تنها باید مراقب آرگومان‌های غیر از self باشید.

گام 6) کد کامل در زیر آمده است

# Example file for working with classes
class myClass():
  def method1(self):
      print("Guru99")
        
  def method2(self,someString):    
      print("Software Testing:" + someString)
  
      
def main():           
  # exercise the class methods
  c = myClass ()
  c.method1()
  c.method2(" Testing is fun")
  
if __name__== "__main__":
  main()

وراثت (Inheritance) چگونه کار می‌کند

وراثت یکی از ویژگی‌های برنامه‌نویسی شی‌گرا می‌باشد؛ وراثت به معنی تعریف کلاس‌های جدید از طریق تغییرات کوچک (یا بدون هیچ تغییری) در کلاس‌های از پیش موجود می‌باشد.کلاس جدید کلاس مشتق شده (derived class) نام دارد و کلاسی که از آن به ارث گرفتیم کلاس پایه (base class) نامیده می‌شود. یک کلاس می‌تواند خواص و متدهای رفتاری کلاس دیگر را به ارث ببرد. این کلاس زیرکلاس (subclass) یا کلاس وارث (heir class) نامیده می‌شود.

شی گرایی در پایتون

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

class DerivedClass(BaseClass):
    body_of_derived_class

گام 1)  کد زیر را اجرا کنید.

# Example file for working with classes
class myClass():
  def method1(self):
      print("Guru99")
        
  
class childClass(myClass):
  #def method1(self):
        #myClass.method1(self);
        #print ("childClass Method1")
        
  def method2(self):
        print("childClass method2")     
         
def main():           
  # exercise the class methods
  c2 = childClass()
  c2.method1()
  #c2.method2()

if __name__== "__main__":
  main()

دقت کنید که در کلاس childClass، method1 تعریف نمی‌شود اما از کلاس والد myClass به ارث برده می‌شود. خروجی Guru99 می‌باشد.

مطلب پیشنهادی:  تاپل در پایتون چیست؟ بسته‌بندی، مقایسه، بخش‌بندی، حذف، کلید

گام 2) خط 10# و 8# را از حالت کامنت خارج کرده و کد را اجرا کنید.

اکنون، method1 در کلاس childClass تعریف شده است و خروجی «childClass Mthod1» نمایش داده می‌شود.

گام 3)  خط 9# را از حالت کامنت خارج کرده و کد را اجرا کنید.

می‌توان یک متد از کلاس والد را با استفاده از کد زیر فراخوانی کرد.

ParentClassName.MethodName(self)

در این کلاس myClass.method1(self) را فراخوانی کرده و Guru99 مطابق انتظار چاپ می‌شود.

گام 4) متد 2 از کلاس فرزند فراخوانی شده و «childClass mthod2» مطابق انتظار چاپ می‌شود.

سازنده‌ها ( Constructor) در پایتون

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

سازنده با دوزیرخط (__) آغاز می‌شود. این متد ()__init__ نام دارد.

در مثال زیر با استفاده از سازنده نام کاربر را دریافت می‌کنیم.

class User:
    name = ""

    def __init__(self, name):
        self.name = name

    def sayHello(self):
        print("Welcome to Guru99, " + self.name)

User1 = User("Alex")
User1.sayHello()

خروجی برابر می‌شود با:

Welcome to Guru99, Alex

مثال پایتون 2

کدهای بالا همگی برای پایتون 3 بودند. برای استفاده از آنها در پایتون 2، از کدهای زیر استفاده کنید.

# How to define Python classes
# Example file for working with classes
class myClass():
  def method1(self):
      print "Guru99"
        
  def method2(self,someString):    
      print "Software Testing:" + someString
      
   
      
def main():           
  # exercise the class methods
  c = myClass ()
  c.method1()
  c.method2(" Testing is fun")
  
if __name__== "__main__":
  main()


#How Inheritance works
# Example file for working with classes
class myClass():
  def method1(self):
      print "Guru99"
        
      
class childClass(myClass):
  #def method1(self):
        #myClass.method1(self);
        #print "childClass Method1" 
        
  def method2(self):
        print "childClass method2"     
         
def main():           
  # exercise the class methods
  c2 = childClass()
  c2.method1()
  #c2.method2()

if __name__== "__main__":
  main()

خلاصه شی‌گرایی در پایتون

کلاس یک نوع گروه‌بندی منطقی داده‌ها و توابع می‌باشد. کلاس در پایتون همه ویژگی‌های استاندارد برنامه نویسی شی گرا را فراهم می‌کند.

  • سازوکار وراثت کلاس
  • یک کلاس مشتق شده که هر متدی از کلاس پایه را رونویسی (override) می‌کند.
  • یک متد می‌تواند یک متد از کلاس پایه با همان نام را فراخوانی کند.
  • کلاس‌ها در پایتون با کلیدواژه class تعریف می‌شوند.
  • درون کلاس‌ها، می‌توان توابع یا متدها را به عنوان بخشی از کلاس تعریف کرد.
  • همانند کد‌های توابع، حلقه‌ها و …، کدهای درون توابع باید همگی تورفتگی داشته باشند.
  • آرگومان self در پایتون به خود شی ارجاع داده می‌شود. self نام ترجیح داده شده پایتون برای نشان دادن اولین پارامتر متدهای نمونه در پایتون می‌باشد.
  • هنگام فراخوانی یک متد نمونه از نمونه شی، زمان اجرای پایتون خودش self را به صورت خودکار ارسال می‌کند، چه شما آن را فراهم کرده باشید و چه نکرده باشید.
  • در پایتون، یک کلاس می‌تواند خواص و متدهای رفتاری یک کلاس دیگر را به ارث ببرد. این کلاس زیر کلاس یا کلاس وارث نامیده می‌شود.
مطلب پیشنهادی:  عملگرها در پایتون: عملگرهای حسابی، منطقی، مقایسه ای

منبع: ترجمه از سایت guru99.com

خب به پایان آموزش شی‌گرایی در پایتون رسیدیم. در جلسه بعدی آموزش پایتون به بررسی بحث درک تابع main در برنامه نویسی پایتون خواهیم پرداخت. لطفا در جلسه بعدی با ما همراه باشید. اگر نظری داشتین در قسمت کامنت‌ها ⇓ بنویسید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *