انواع متدها در کلاس های پایتون
در پایتون، سه نوع اصلی متد داریم که هر کدام کاربرد و نحوه استفاده خاص خود را دارند:
۱. Instance Method (متد نمونه)
این متدها معمولترین نوع متدها هستند. همیشه اولین آرگومان آنها self
است که به نمونه (object) جاری کلاس اشاره میکند. این متدها میتوانند به دادهها و ویژگیهای آن نمونه دسترسی داشته باشند و آنها را تغییر دهند.
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print(f"Hello, my name is {self.name}")
p = Person("Ali")
p.greet() # خروجی: Hello, my name is Ali
۲. Class Method (متد کلاس)
این متدها با دکوراتور @classmethod
تعریف میشوند و اولین آرگومان آنها cls
است که به خود کلاس اشاره دارد (نه به نمونهها). این متدها معمولا برای تغییر وضعیت کلی کلاس یا ساخت نمونه از روشهای متفاوت استفاده میشوند.
class Person:
population = 0
def __init__(self, name):
self.name = name
Person.population += 1
@classmethod
def get_population(cls):
return cls.population
p1 = Person("Ali")
p2 = Person("Sara")
print(Person.get_population()) # خروجی: 2
۳. Static Method (متد ایستا)
این متدها با دکوراتور @staticmethod
تعریف میشوند و هیچ آرگومان پیشفرضی (نه self
و نه cls
) نمیگیرند. این متدها عملکردهایی مستقل از نمونه یا کلاس انجام میدهند، اما به دلایل سازماندهی کد داخل کلاس قرار میگیرند.
class MathHelper:
@staticmethod
def add(x, y):
return x + y
print(MathHelper.add(5, 3)) # خروجی: 8
۴. Property (ویژگی)
ویژگیها به ما اجازه میدهند که متدهایی را مانند صفتهای معمولی (attribute) بخوانیم یا مقداردهی کنیم. با استفاده از دکوراتور @property
میتوانیم دسترسی کنترل شده به دادههای کلاس داشته باشیم و در عین حال رابط سادهای برای کاربر فراهم کنیم.
class Person:
def __init__(self, name, lastname):
self._name = name
self._lastname = lastname
@property
def fullname(self):
return f"{self._name} {self._lastname}"
p = Person("Ali", "Ahmadi")
print(p.fullname) # خروجی: Ali Ahmadi
در این مثال، fullname
یک متد است که با @property
به صورت یک ویژگی بدون نیاز به پرانتز فراخوانی میشود. این امکان باعث میشود دادهها به شکل مرتب و کنترلشده در دسترس باشند.
خلاصه تفاوتها
نوع متد | آرگومان اول | دسترسی به | کاربرد اصلی |
---|---|---|---|
Instance Method | self |
ویژگیها و دادههای نمونه | تعامل با دادههای هر نمونه |
Class Method | cls |
ویژگیها و دادههای کلاس | دسترسی و تغییر دادههای کلی کلاس |
Static Method | ندارد | ندارد (مستقل) | عملکرد مستقل که به کلاس مربوط است |
Property | ندارد (فقط خواندن) | ویژگیهای داخلی کنترل شده | دسترسی ساده و کنترل شده به دادهها |