در این ویدیو در مورد متدهای class method و static method و instance method صحبت میکنیم. در زمان کار با کلاس های پایتون سه نوع متد وجود دارد که میتوانید از آنها استفاده کنید. این متدها با اهداف مشخصی استفاده میشوند که در این ویدیو با هر سه آنها آشنا خواهید شد.
# instance method در پایتون
در پایتون instance method به متدهای عادی گفته میشود که در کلاسها وجود دارد. در پایین یک کلاس به نام Person داریم که در متد init آن، نام و قد افراد را ذخیره میکنیم. یک متد هم به نام show داریم که نام و قد فرد را چاپ میکند.
در آخر کد نیز یک آبجکت از کلاس Person ساخته و مقداردهی کرده ایم:
class Person:
def __init__(self, name, height):
self.name = name
self.height = height
def show(self):
print(f'{self.name} is {self.height}')
p = Person('amir', 180)
p.show()
# output
amir is 180
در کد بالا، زمانی که با آبجکت p متد show را صدا میزنید، به طور اتوماتیک آبجکت p به عنوان اولین آرگومان به متد show ارسال میشود. به عبارت دیگر، آرگومان self که در متد show وجود دارد همان آبجکت p است. متد show یک instance method است. به متدهایی که اولین آرگومان آنها همان آبجکت است، instance method گفته میشود.
# class method در پایتون
برخلاف instance methodها که آبجکت را به عنوان اولین آرگومان میگرفتند، class methodها خود کلاس را به عنوان اولین آرگومان میگیرند. مثال را بالا تغییر داده و به شکل زیر در میآوریم:
import datetime
class Person:
def __init__(self, name, height, age):
self.name = name
self.height = height
self.age = age
def show(self):
print(f'{self.name} is {self.height} is {self.age}')
@classmethod
def from_birth(cls, name, height, age):
return cls(name, height, datetime.datetime.now().year - age)
p = Person.from_birth('amir', 180, 1990)
p.show()
برای ایجاد کردن class method باید از دکوراتور classmethod استفاده کنید. در زمان ساخت class method دیگر نیازی به self به عنوان اولین آرگومان ندارید و از cls استفاده میکنید که اشاره به خود کلاس دارد.
در کد بالا متد from_birth را اضافه کردیم که با دکوراتور classmethod آنرا به یک class method تبدیل کرده ایم. اولین آرگومانی که میگیرد cls است که اشاره به کلاس Person دارد.
# static method در پایتون
متدهای static برخلاف متدهای class و instance هیچ مقداری را به عنوان اولین آرگومان نیاز ندارند. متدهای static متدهایی هستند که از نظر منطقی شبیه به کلاس مورد استفاده دارند اما نیازی به آبجکت یا خود کلاس ندارند:
class Person:
def __init__(self, name, height, age):
self.name = name
self.height = height
self.age = age
@staticmethod
def is_adult(age):
if age > 18:
print('yes')
else:
print('no')
Person.is_adult(23)
در کد بالا متد is_adult سن را گرفته و مشخص میکند که آیا بزرگسال است یا خیر. این متد هیچ نیازی به آبجکت یا کلاس ندارد، پس میتواند یک instance method باشد.
ارسال نظر