
آموزش class method و static method در پایتون
May 2023
در این ویدیو در مورد متدهای 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 باشد.
زمان کل دوره
5:47:36
Mohammadam
April 2023پاسخ به نظر
با اجازتون من ویدیو ها رو دانلود میکنم. راضی باشید :)
ارسال نظر
امیرحسین بیگدلو
April 2023سلام
خواهش میکنم. هر ویدیویی که دوست دارید رو میتونید دانلود کنید
sam
November 2022پاسخ به نظر
درود بر شرافتت که زحمت کشیدی و داری آموزش میدی.درود بر شرافتت
ارسال نظر
mamali
October 2022پاسخ به نظر
agha i love you dari
ارسال نظر
Alireza
October 2022پاسخ به نظر
ممنون استاد
خیلی خوب توضیح دادید
به قدری خوب درک کردم که تونستم حتی سن رو از ورودی به is_adult ندم و از طریق کلاس بگیرمش
کدی که نوشتم
from datetime import datetime
class Person:
def __init__(self, name, height, birth_date):
self.name = name
self.height = height
self.birth_date = birth_date
def show(self):
print(self.name, self.height, self.birth_date)
@classmethod
def from_birth(cls, name, height, birth_date):
Person.age = datetime.now().year - birth_date
return cls(name, height, Person.age)
@staticmethod
def is_adult():
if Person.age >= 18: print('yes')
else: print('no')
p1 = Person.from_birth('Alireza', 180, 2001)
p1.show()
p1.is_adult()
ارسال نظر
Hossein
October 2022پاسخ به نظر
سلام با سبک توضیحتون بشدت برام راحته اصلا انرژی میگیرم از اینکه تو آموزش بتونم ازتون جلو بیوفتم و واقعا آدم های مثل شما رو تو ذهنم همیشه نیاز داشتم
ارسال نظر
مریم
September 2022پاسخ به نظر
وقتتون بخیر
بسیار ممنون بابت آموزشهای بسیار عالیتون.
بسیار مفید و کاربردی هستن.
من دنبال آموزش نمودار سازی،متلب ، visulisierung هستم ولی پیدا نکردم
و متاسفانه باکس سرچ هم نبود
ممنون میشم ازتون اگر من رو راهنمایی کنید.
ارسال نظر
امیرحسین بیگدلو
September 2022سلام
همچین آموزشی ندارم
عاطفه
August 2022پاسخ به نظر
ممنونم ازتون بالاخره تونستم یکم ذهنمو روشن کنم در مورد این موضوع
ارسال نظر
Hadi
August 2022پاسخ به نظر
ممنون بابت اموزش هاتون
خیلی ساده و خلاصع میگید
فقط بعضی چیز هارو نگفتید
همه فیلم هاتونم دانلود کرده ام
باتشکر.
ارسال نظر
امیرحسین بیگدلو
August 2022سلام
مثلا چی رو نگفتم؟
رامین
June 2022پاسخ به نظر
آقا دس خوش
ارسال نظر
mojtaba
November 2021پاسخ به نظر
سلام می خواهم class method دانلود کنم ولی نمی شه امکان دانلود از سایت شما وجود نداره؟
ارسال نظر
امیرحسین بیگدلو
November 2021سلام
خیر. هیچ ویدیویی از سایت قابل دانلود نیست.
محمد
November 2021پاسخ به نظر
اراِِِیه عالی
ارسال نظر
اشکان خوش باش
August 2021پاسخ به نظر
من همین مثال رو توی اینترنت پیدا کردم ولی 20 % کارو متوجه نشدم
دیگه با توضیحات خوبتون کامل متوجه شدم
ارسال نظر
S313
April 2021پاسخ به نظر
خیلی خیلی دمت گرم عالی بود
ارسال نظر