سلام وقت بخیر و خسته نباشید به استاد عزیز در قسمت 64 که مبحث class methods رو توضیح میدهید از وسط ویدیو به بعد یعنی مثال دوم رو اصلا متوجه نشدم اگر راهنمایی ممنونتون مشیم!!!
با سلام.
در پایتون از سه نوع متد در کلاسها استفاده می شود که برای روشن شدن موضوع مورد نظر شما دو مورد آنرا بررسی می کنیم:
instance method ها متدهایی هستند که بوسیله ی ساخت نمونه از کلاسها قابل دسترسی هستند و self در واقع به نمونه ی ساخته شده از کلاس اشاره می کند.
class method ها متدهایی هستند که بدون ساخت نمونه (instance | object) از یک کلاس، و مستقیماً از طریق خود کلاس قابل دسترسی هستند.
مثلاً:
class User:
def __init__(self,gotName,gotFamily):
self.name = gotName
self.family = gotFamily
print(f"{self.showFullName()}")
def showFullName(self):
return f"{self.name} {self.family}"
@classmethod
def from_string(cls,string_data):
data = string_data.split(',')
return cls(data[0], data[1])
User.from_string('Ahmadreza, Arabpour') # output: Ahmadreza Arabpour
در اینجا بدون ساخت یک نمونه از کلاس User، متد from_string فراخوانی و مقادیر نام و نام خانوادگی به آن ارسال شده است.
در تعریف این متد، یعنی:
def from_string(cls,string_data):
دیگر خبری از self (که به instance های ساخته شده از کلاس اشاره می کند) نیست و به جای آن از cls استفاده شده که به خود کلاس User اشاره دارد.
قسمت مهم دیگر، این بخش است:
return cls(data[0], data[1])
return cls در واقع خود کلاس را بر می گرداند (و نه instance ساخته شده از آن را) سپس متد init و showFullName (که درون init فراخوانی شده) اجرا می شوند و بدون ساختن نمونه از کلاس می توان مقادیر را به کلاس ارسال کرده و خروجی مناسب را دریافت کرد.
خلاصه:
* تفاوت این دو متد در نحوه ی دسترسی و فراخوانی آنهاست که instance method با ساخت نمونه از کلاس صورت می گیرد ولی class method به طور مستقیم از طریق خود کلاس، قابل دستیابی و فراخوانی است.
* self در instance method به object | instance ساخته شده از کلاس اشاره می کند.
* cls در class method به خود کلاس اشاره می کند.
توجه کنید که self, cls کلمات کلیدی (keyword) نیستند و می توانید به جای آنها از هر عبارت دیگری استفاده کنید.
امیدوارم که با این توضیحات، مطلب کمی برایتان روشن تر شده باشد.
موفق باشید.