سپتامبر 14, 2019 Mostafa بدون دیدگاه

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

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

پایتون همواره از ابتدای پیدایش، یکی از زبان های شئ گرا بوده است. به همین دلیل ساخت و استفاده از کلاس ها و اشیاء در آن آسان است. در این مقاله کمک میکنیم که در برنامه نویسی شئ گرا با پایتون به مهارت بالایی برسید. با zerotohero همراه شوید تا قهرمان برنامه نویسی شئ گرا با پایتون شوید!

اگر با برنامه نویسی شئ گرا آشنایی ندارید، در ابتدا مروری کلی بر مفاهیم شئ گرایی خواهیم داشت. سپس به بحث شئ گرایی در پایتون خواهیم پرداخت.

مروری بر شئ گرایی :

کلاس : نمونه اولیه ای است که توسط برنامه نویس نوشته میشود و شامل صفت ها، متدهایی است که هرکدام کار خاصی را انجام میدهد.

متغیر کلاس : متغیری است که در میان تمام اعضای کلاس مشترک است. متغیر کلاس در داخل کلاس و خارج از متدهای کلاس تعریف میشود.

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

وراثت: انتقال خصوصیات یک کلاس به کلاس های دیگر گویند.

نمونه : شئ مخصوص هر کلاس را گویند. برای مثال، یک شی به نام obj که به کلاس circle تعلق دارد نمونه ای از کلاس circle است.

نمونه سازی (instantiation) : ساخت شئ از یک کلاس را گویند.

متد: نوع خاصی از توابع هستند که در کلاس تعریف میشوند.

شئ: نمونه ای یکتا از یک ساختار داده ای که توسط کلاس آن تعریف شده است.

بارگزاری عملگرها : اختصاص بیش از یک رفتار به یک عملگر خاص است.

 

ایجاد کلاس

با کلمه class یک کلاس جدید تعریف میکنیم. پس از کلمه class نام کلاس را به همراه دو نقطه می آوریم. همانند نمونه زیر:

class ClassName:
    'Optional class docum entation string'
     class_suite
  • در خط دوم مستندات کلاس را مشاهده میکنید که توسط متد __doc__ قابل دسترسی است.
  • خط سوم به بعد میتواند شامل تمامی متغیر ها و تعریف متدهای یک کلاس باشد.

نمونه کاملی از یک کلاس به زبان پایتون نوشته شده را میبینید :

class Em ployee:
'Com m on base class for all em ployees'
em pCount = 0
def __init__(self, nam e, salary):
self.nam e = nam e
self.salary = salary
Em ployee.em pCount += 1
def displayCount(self):
print "Total Em ployee %d" % Em ployee.em pCount
def displayEm ployee(self):
print "Nam e : ", self.nam e, ", Salary: ", self.salary
  • متغیر empcount یک متغیر کلاسی است که در بین تمام نمونه های این کلاس مشترک است. از طریق empCount میتوان از داخل و بیرون از کلاس به آن دسترسی داشت.
  • متد اول __init__ متد خاصی است که سازنده کلاس (class constructure) یا مقدار اولیه دهنده کلاس نامیده میشود. هر زمان که شی جدیدی از یک کلاس ساخته میشود پایتون این متدها را فراخوانی میکند.
  • بقیه متدها را میتوانید همانند توابع تعریف کنید با این تفاوت که پارامتر اول را حتما باید self قرار دهید. اما در زمان فراخوانی متدها، پایتون خود پارامتر self را اضافه میکند و نیازی به مقدار دهی آن توسط شما نیست.

ساخت شی از کلاس

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

"This would create first object of Em ployee class"
em p1 = Em ployee("Zara", 2000)
"This would create second object of Em ployee class"
em p2 = Em ployee("Manni", 5000)

دسترسی به صفت های شئ

شما میتوانید با استفاده از نام شئ و بلافاصله نقطه، به متدها و متغیرهای کلاس دسترسی داشته باشید. با توجه به نمونه کدهای قسمت قبل، ما دو شئ emp1 و emp2 داشتیم. حال نحوه دسترسی به محتویات این دو شئ را بررسی میکنیم.

emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

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

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

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

Name : Zara ,Salary: 2000
Name : Manni ,Salary: 5000
Total Employee 2

شما میتوانید هر لحظه که خواستید صفت های هر کلاس و شئ را اضافه ، پاک یا تغییر دهید. به کد زیر توجه کنید:

emp1.age = 7  # Add an 'age' attribute.
emp1.age = 8  # Modify 'age' attribute.
del emp1.age  # Delete 'age' attribute.

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

  • gettr : دسترسی به صفت کلاس
  • hasattr : چک میکند آیا چنین صفتی در کلاس وجود دارد یا خیر
  • setattr : یک صفت را مقدار دهی میکند. اگر آن صفت وجود نداشت , آن را ایجاد میکند
  • delattr : یک صفت را حذف میکند

نحوه استفاده از توابع بالا در قالب یک مثال میتوانید در زیر ببینید:

hasattr(emp1, 'age')    # Returns true if 'age' attribute exists
getattr(emp1, 'age')    # Returns value of 'age' attribute
setattr(emp1, 'age', 8) # Set attribute 'age' at 8
delattr(empl, 'age')    # Delete attribute 'age'