یک کلاس در پایتون یک الگوی تعریف شده توسط کاربر برای ایجاد اشیا است. این الگو دادهها و توابع را با هم ترکیب میکند و مدیریت و استفاده از آنها را آسانتر میکند. وقتی یک کلاس جدید ایجاد میکنیم، یک نوع جدید از اشیا تعریف میکنیم و میتوانیم چندین نمونه از این نوع شی بسازیم.در این مقاله، هدف ارائه یک آموزش جامع درباره مفهوم کلاس در پایتون و نحوه استفاده از آن در این زبان است. همچنین، با بهرهگیری از مثالهای عملی در پایتون، روشهای پیادهسازی اصول شیگرایی با استفاده از کلاسها مورد بررسی قرار میگیرد.
مقدمه
کلاس در پایتون ابزاری برای تعریف و ساخت اشیا «objects» هستند که به شما امکان میدهند تا ویژگیها «attributes» و متدهای «methods» مختلفی را برای اشیاء خود تعیین کنید. کلاس در پایتون به عنوان الگوهایی برای ساخت اشیاء عمل میکنند و با استفاده از آنها میتوان ساختارهای پیچیدهتری را در برنامهها پیادهسازی کرد. به کمک کلاسها، میتوان مفاهیم برنامهنویسی شیگرا «Object-Oriented Programming» را در پایتون پیادهسازی کرده و از قابلیتهایی مانند وراثت، کپسولهسازی و چندریختی بهره برد. ایجاد کلاسها به برنامهنویس این امکان را میدهد که دادهها و رفتارهای مرتبط با آنها را در یک مجموعه منظم و قابل استفاده مجدد سازماندهی کند.
کلاس در پایتون با استفاده از کلمه کلیدی class ایجاد میشوند. ویژگیها «Attributes» متغیرهایی هستند که در داخل کلاس تعریف میشوند و نمایانگر خصوصیات کلاس هستند. ویژگیها را میتوان با استفاده از عملگر نقطه (.) دسترسی پیدا کرد.
# define a class class Dog: sound = "bark" # class attribute
ایجاد شی در پایتون
برای ایجاد یک شی از یک کلاس در پایتون، ابتدا باید کلاس مورد نظر را تعریف کرده و سپس یک نمونه از آن را ایجاد کنیم. در ادامه، شیای از کلاس Dog ایجاد میکنیم:
class Dog: sound = "bark" # Create an object from the class dog1 = Dog() # Access the class attribute print(dog1.sound)
ویژگی sound که به عنوان ویژگی کلاس تعریف شده است، ویژگی مشترکی است که بین تمامی نمونههای کلاس Dog به اشتراک گذاشته میشود. این ویژگی میتواند مستقیما از طریق هر شی «instance» مانند dog1 دسترسی پیدا کند.
استفاده از تابع ()__init__ در پایتون
تابع ()__init__ در پایتون برای مقداردهی اولیه ویژگیهای شی هنگام ایجاد آن استفاده میشود.
class Dog: species = "Canine" # Class attribute def __init__(self, name, age): self.name = name # Instance attribute self.age = age # Instance attribute
- class Dog: کلاسی به نام Dog تعریف میکند.
- species: ویژگی کلاس که بین تمام نمونههای کلاس مشترک است.
- __init__ method: ویژگیهای name و age را هنگام ایجاد شی جدید مقداردهی اولیه میکند.
مقداردهی اولیه شی با __init__ در پایتون
class Dog: species = "Canine" # Class attribute def __init__(self, name, age): self.name = name # Instance attribute self.age = age # Instance attribute # Creating an object of the Dog class dog1 = Dog("Buddy", 3) print(dog1.name) # Output: Buddy print(dog1.species) # Output: Canine
خروجی:
Buddy Canine
- dog1 = Dog(“Buddy”, ۳): یک شی از کلاس Dog ایجاد میکند با ویژگیهای name برابر با «Buddy» و age برابر با ۳.
- dog1.name: ویژگی نمونه name شی dog1 را دسترسی میدهد که در اینجا برابر با «Buddy» است.
- dog1.species: ویژگی کلاس species را که برای تمامی نمونههای کلاس مشترک است، دسترسی میدهد.
پارامتر self در پایتون
پارامتر self به نمونه فعلی کلاس در پایتون اشاره دارد و به ما امکان میدهد به ویژگیها و متدهای شی دسترسی داشته باشیم.
class Dog: def bark(self): print(self.name) dog1 = Dog("Buddy", 3) dog1.bark()
- self.name: به ویژگی name شی (مثل dog1) که متد را فراخوانی کرده است، اشاره دارد.
- ()dog1.bark: متد bark را روی شی dog1 اجرا میکند.
متد __str__ در پایتون
متد __str__ در پایتون به ما امکان میدهد یک نمایش متنی سفارشی برای یک شی تعریف کنیم. به صورت پیشفرض، وقتی یک شی چاپ میشود یا به رشته تبدیل میشود «با استفاده از ()str »، پایتون از پیادهسازی پیشفرض استفاده میکند که معمولا رشتهای مانند <__main__.ClassName object at 0x00000123> برمیگرداند.
class Dog: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f"{self.name} is {self.age} years old." # Correct: Returning a string dog1 = Dog("Buddy", 3) dog2 = Dog("Charlie", 5) print(dog1) print(dog2)
خروجی:
Buddy is 3 years old. Charlie is 5 years old.
- __str__ Implementation: بهعنوان یک متد در کلاس Dog تعریف شده و با استفاده از پارامتر self به ویژگیهای نمونه مانند name و age دسترسی پیدا میکند.
- Readable Output: وقتی print(dog1) فراخوانی میشود، پایتون به طور خودکار از متد __str__ برای دریافت نمایش متنی شی استفاده میکند. در صورت نبود این متد، خروجی به شکل <__main__.Dog object at 0x00000123> خواهد بود.
متغیرهای کلاس و نمونه در پایتون
در پایتون، متغیرهایی که در یک کلاس تعریف میشوند میتوانند متغیرهای کلاس یا متغیرهای نمونه باشند. درک تفاوت بین این دو برای برنامهنویسی شیگرا بسیار مهم است.
متغیرهای کلاس در پایتون
متغیرهایی که بین تمامی نمونههای یک کلاس مشترک هستند. این متغیرها در سطح کلاس تعریف میشوند و خارج از هر متد قرار دارند. تمامی اشیا کلاس به یک مقدار از این متغیر دسترسی دارند، مگر اینکه بهطور صریح برای یک شی تغییر داده شوند.
متغیرهای نمونه در پایتون
متغیرهایی که برای هر نمونه از کلاس منحصربهفرد هستند. این متغیرها معمولا در متد __init__ یا سایر متدهای نمونه تعریف میشوند. هر شی نسخه مستقل خود را از این متغیرها نگهداری میکند و تغییر در یک شیء تأثیری بر سایر اشیا ندارد.
class Dog: # Class variable species = "Canine" def __init__(self, name, age): # Instance variables self.name = name self.age = age # Create objects dog1 = Dog("Buddy", 3) dog2 = Dog("Charlie", 5) # Access class and instance variables print(dog1.species) # (Class variable) print(dog1.name) # (Instance variable) print(dog2.name) # (Instance variable) # Modify instance variables dog1.name = "Max" print(dog1.name) # (Updated instance variable) # Modify class variable Dog.species = "Feline" print(dog1.species) # (Updated class variable) print(dog2.species)
خروجی:
Canine Buddy Charlie Max Feline Feline
- متغیر کلاس (species): بین تمامی نمونههای کلاس مشترک است. تغییر Dog.species بر روی تمام اشیا تأثیر میگذارد زیرا ویژگی خود کلاس است.
- متغیرهای نمونه (name, age): در متد __init__ تعریف میشوند و برای هر نمونه منحصربهفرد هستند (مانند dog1.name و dog2.name که متفاوتاند).
- دسترسی به متغیرها: متغیرهای کلاس از طریق نام کلاس (Dog.species) یا یک شی (dog1.species) قابل دسترسیاند. متغیرهای نمونه فقط از طریق شی (dog1.name) دسترسیپذیرند.
- بهروزرسانی متغیرها: تغییر Dog.species تمامی نمونهها را تحت تأثیر قرار میدهد. تغییر dog1.name فقط روی dog1 تأثیر دارد و به سایر نمونهها مثل dog2 ربطی ندارد.
نتیجه گیری
کلاسها و اشیا یکی از مفاهیم کلیدی برنامهنویسی شی گرا (OOP) هستند که در پایتون به صورت ساده و قابل فهم پیادهسازی شدهاند. استفاده از کلاسها به توسعهدهندگان این امکان را میدهد تا دادهها و عملکردها را در قالب واحدهای منطقی سازماندهی کنند و کدی ماژولار، قابلاستفاده مجدد و مقیاسپذیر ایجاد کنند. با تعریف کلاسها، میتوان طرحی برای ایجاد اشیاء با خصوصیات و رفتارهای مشترک طراحی کرد. اشیا هم به عنوان نمونههایی از کلاس، ترکیبی از دادهها و توابع مرتبط را در خود جای میدهند که باعث میشود کد به صورت ساختارمندتری نوشته شود.
ویژگیهایی مانند ارثبری، چندریختی و کپسولهسازی به شما کمک میکنند تا پروژههای پیچیده را به بخشهای کوچکتر و مستقل تقسیم کنید. در نهایت، درک و استفاده از کلاسها و اشیاء در پایتون میتواند منجر به نوشتن کدهایی شود که هم قابلفهمتر و هم آسانتر برای نگهداری هستند.