کلاس

کلاس در حکم یک نقشه برای یک شیء می‌باشد. شی یک چیز واقعی است که از ساختار، خواص و یا رفتارهای کلاس پیروی می‌کند. کلاس شامل فیلدها و خواص (properties) و متدها است. وقتی یک شیء می‌سازید یعنی اینکه یک نمونه از کلاس ساخته‌اید (در درس ممکن است از کلمات شیء و نمونه به جای هم استفاده شود). در زیر نحوه تعریف کلاس در پایتون نشان داده شده است:

class ClassName:
    field1;
    field2;
    ...
    fieldN;

    method1;
    method2;
    ...
    methodN;  

کلمه کلیدی class را قبل از نامی که برای کلاسمان انتخاب می‌کنیم، می‌نویسیم. در نامگذاری کلاس‌ها هم از روش نامگذاری Pascal استفاده می‌کنیم. در بدنه کلاس فیلدها و متدهای آن قرار داده می‌شوند. فیلدها، اعضای داده‌ای خصوصی هستند که کلاس از آنها برای رفتارها و ذخیره مقادیر خاصیت‌هایش (property) استفاده می‌کند. متدها رفتارها یا کارهایی هستند که یک کلاس می‌تواند انجام دهد. در زیر نحوه تعریف و استفاده از یک کلاس ساده به نام person نشان داده شده است.

  1: class Person:
  2: 
  3:     name   = "";
  4:     age    = 0;
  5:     height = 0;
  6: 
  7:     def TellInformation(self):
  8:         print("Name: {0}".format(self.name));
  9:         print("Age: {0} years old".format(self.age));
 10:         print("Height: {0}cm".format(self.height));
 11: 
 12: firstPerson  = Person();
 13: secondPerson = Person();
 14: 
 15: firstPerson.name    = "Jack";
 16: firstPerson.age     = 21;
 17: firstPerson.height  = 160;
 18: firstPerson.TellInformation();
 19: 
 20: print(); #Separator
 21: 
 22: secondPerson.name   = "Mike";
 23: secondPerson.age    = 23;
 24: secondPerson.height = 158;
 25: secondPerson.TellInformation();
Name: Jack
Age: 21 years old
Height: 160cm

Name: Mike
Age: 23 years old
Height: 158cm

در خطوط 10-1 کلاس Person تعریف شده است. در خط 1 یک نام به کلاس اختصاص داده‌ایم تا به وسیله آن قابل دسترسی باشد. در داخل بدنه کلاس فیلدهای آن تعریف شده‌اند (خطوط 5-3). این سه فیلد تعریف شده خصوصیات واقعی یک فرد در دنیای واقعی را در خود ذخیره می‌کنند. یک فرد در دنیای واقعی دارای نام، سن، و قد می‌باشد. در خطوط 10-7 یک متد هم در داخل کلاس به نام TellInformation() تعریف شده است که رفتار کلاسمان است و مثلاً اگر از فرد سوالی بپرسیم در مورد خودش چیزهایی می‌گوید. در داخل متد کدهایی برای نشان دادن مقادیر موجود در فیلدها نوشته شده است. نکته‌ای درباره فیلدها وجود دارد و این است که چون فیلدها در داخل کلاس تعریف و به عنوان اعضای کلاس در نظر گرفته شده‌اند محدوده آنها یک کلاس است.

این بدین معناست که فیلدها فقط می‌توانند در داخل کلاس یعنی جایی که به آن تعلق دارند و یا به وسیله نمونه ایجاد شده از کلاس مورد استفاده قرار بگیرند. در خطوط 13-12 دو نمونه یا دو شیء از کلاس Person ایجاد می‌کنیم. همانطور که در خطوط 12 و 13 مشاهده می کنید برای ایجاد یک نمونه از یک کلاس، ابتدا یک نام برای شیء انتخاب کرده، علامت مساوی و بعد از آن نام کلاس و یک جفت پرانتز قرار می دهیم. وقتی نمونه کلاس ایجاد شد، سازنده را صدا می‌زنیم. یک سازنده متد خاصی است که برای مقداردهی اولیه به فیلدهای یک شیء به کار می‌رود. وقتی هیچ آرگومانی در داخل پرانتزها قرار ندهید، کلاس یک سازنده پیشفرض بدون پارامتر را فراخوانی می‌کند. درباره سازنده‌ها در درس‌های آینده توضیح خواهیم داد.

در خطوط 17-15 مقادیری به فیلدهای اولین شیء ایجاد شده از کلاس Person (first Person) اختصاص داده شده است. برای دسترسی به فیلدها یا متدهای یک شیء از علامت نقطه (دات) استفاده می‌شود. به عنوان مثال کد firstPerson.name نشان دهنده فیلد name از شیء firstPerson می‌باشد. برای چاپ مقادیر فیلدها باید متد TellInformation() شی firstPerson را فراخوانی می‌کنیم. در خطوط 24-22 نیز مقادیری به شی دومی که قبلاً از کلاس ایجاد شده تخصیص می‌دهیم و سپس متد TellInformation() را فراخوانی می‌کنیم. به این نکته توجه کنید که firstPerson و secondPerson نسخه‌های متفاوتی از هر فیلد دارند بنابراین تعیین یک نام برای secondPerson هیچ تاثیری بر نام firstPerson ندارد. ممکن است که این سوال برایتان پیش آمده باشد که کاربرد کلمه self چیست؟ self به شیء ایجاد شده اشاره می کند. چون ما نمی دانیم که چه شیء ای و با چه نامی ایجاد خواهد شد، برای اشاره به شیء ای که ایجاد خواهد شده از self استفاده می شود (معادل آن this در C#‎ می باشد).