مقدمه

به فصل «کلاس‌ها» خوش آمدید. «برنامه‌نویسی شیءگرا» یا Object-Oriented Programming (OOP) یکی از قدرتمندترین پارادایم‌های برنامه‌نویسی است که به ما اجازه می‌دهد تا مفاهیم دنیای واقعی را در قالب «اشیاء» (objects) مدل‌سازی کنیم. یک «کلاس» (Class) در واقع یک نقشه یا طرح اولیه برای ساختن این اشیاء است. کلاس‌ها به ما کمک می‌کنند تا داده‌ها (که به آنها «اتریبیوت» یا attributes می‌گوییم) و رفتارهایی (که با «متدها» یا methods تعریف می‌شوند) که مربوط به یک مفهوم خاص هستند را در یک جا جمع‌آوری کنیم.

تعریف یک کلاس ساده

در پایتون، ما با استفاده از کلمه کلیدی class یک کلاس جدید تعریف می‌کنیم. طبق قرارداد، نام کلاس‌ها با حرف بزرگ شروع می‌شود و از سبک نام‌گذاری CamelCase استفاده می‌کند. بیایید یک کلاس ساده به نام Dog بسازیم.

Copy Icon PYTHON
class Dog:
    """A simple attempt to model a dog."""
    
    def __init__(self, name, age):
        """Initialize name and age attributes."""
        self.name = name
        self.age = age
        
    def sit(self):
        """Simulate a dog sitting in response to a command."""
        print(f"{self.name} is now sitting.")

    def roll_over(self):
        """Simulate rolling over in response to a command."""
        print(f"{self.name} rolled over!")

کد بالا یک کلاس به نام Dog را تعریف می‌کند. این کلاس یک طرح کلی برای نمایش یک سگ است، اما خود سگ نیست. کلاس Dog به پایتون می‌گوید که چگونه اطلاعات مربوط به یک سگ را ذخیره کند و چه رفتارهایی داشته باشد.

متد __init__()

متد __init__() یک متد خاص در کلاس‌های پایتون است که به آن «سازنده» یا constructor می‌گویند. این متد به صورت خودکار زمانی که شما یک نمونه جدید از کلاس می‌سازید، فراخوانی می‌شود. پارامتر self یک ارجاع به خود نمونه است و همیشه باید اولین پارامتر هر متد در یک کلاس باشد. این پارامتر به شما اجازه می‌دهد تا به اتریبیوت‌ها و متدهای دیگر آن نمونه دسترسی داشته باشید.

در این مثال، سازنده دو پارامتر دیگر (name و age) را دریافت کرده و مقادیر آنها را به اتریبیوت‌های نمونه تخصیص می‌دهد. اتریبیوت‌ها متغیرهایی هستند که به یک نمونه از کلاس تعلق دارند.

ساخت یک نمونه از کلاس

فکر کردن به یک کلاس مانند پر کردن یک فرم است. کلاس فرم را تعریف می‌کند و هر نمونه از کلاس، یک فرم پر شده با اطلاعات مشخص است. برای ساخت یک نمونه (instance) از کلاس Dog، ما کلاس را مانند یک تابع فراخوانی می‌کنیم و آرگومان‌های مورد نیاز سازنده (__init__) را به آن پاس می‌دهیم.

Copy Icon PYTHON
my_dog = Dog('Willie', 6)

print(f"My dog's name is {my_dog.name}.")
print(f"My dog is {my_dog.age} years old.")

در این کد، ما یک نمونه از کلاس Dog ساخته و آن را به متغیر my_dog اختصاص داده‌ایم. پایتون به صورت خودکار متد __init__ را با آرگومان‌های داده شده فراخوانی می‌کند.

دسترسی به اتریبیوت‌ها

برای دسترسی به مقدار یک اتریبیوت از یک نمونه، از «نشانه‌گذاری نقطه» (dot notation) استفاده می‌کنیم. با نوشتن نام نمونه و به دنبال آن یک نقطه و سپس نام اتریبیوت (my_dog.name)، می‌توانیم مقدار آن را بخوانیم.

فراخوانی متدها

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

Copy Icon PYTHON
my_dog = Dog('Willie', 6)
my_dog.sit()
my_dog.roll_over()

وقتی ما my_dog.sit() را فراخوانی می‌کنیم، پایتون این فراخوانی را به Dog.sit(my_dog) ترجمه می‌کند و به این ترتیب، نمونه مورد نظر به عنوان اولین آرگومان (self) به متد پاس داده می‌شود.

در این درس با اصول اولیه برنامه‌نویسی شیءگرا در پایتون و نحوه تعریف و استفاده از کلاس‌ها آشنا شدیم. دیدیم که چگونه می‌توان با استفاده از کلاس، داده‌ها و رفتارها را در یک واحد منطقی کپسوله‌سازی کرد. در درس بعدی، با جزئیات بیشتری به «کار کردن با کلاس‌ها و نمونه‌های کلاس» خواهیم پرداخت.