آموزش 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


0

Intro

10:38

رایگان

1

Variable

12:30

رایگان

2

String

19:22

رایگان

3

List

8:46

رایگان

4

While

9:6

رایگان

5

If

8:37

رایگان

6

For

6:12

رایگان

7

range

4:17

رایگان

8

break, continue, pass

9:15

رایگان

9

Function

12:32

رایگان

10

List methods

12:11

رایگان

11

Tuple

8:29

رایگان

12

Set

7:47

رایگان

13

Dictionary

9:19

رایگان

14

Module

10:40

رایگان

15

fstring

5:35

رایگان

16

format

7:34

رایگان

17

File

17:14

رایگان

18

Scope

6:25

رایگان

19

OOP

12:15

رایگان

20

Method

20:19

رایگان

21

class/instance variable

14:7

رایگان

22

class/static method

13:25

رایگان

23

Inheritance

17:6

رایگان

24

Special methods

9:50

رایگان

25

Access points

11:12

رایگان

26

property

6:54

رایگان

27

Exceptions

21:17

رایگان

28

Standard library

12:51

رایگان

29

Docstring

10:49

رایگان

30

Virtualenv

11:2

رایگان


دوره‌های پیشنهادی

دوره اول آموزش جنگو(django)

دوره اول آموزش جنگو(django)

دوره آموزش regex در پایتون

دوره آموزش regex در پایتون

دوره آموزش وب اسکرپینگ(web scraping) در پایتون

دوره آموزش وب اسکرپینگ(web scraping) در پایتون

ارسال نظر

تلاش میکنم سوالات شما را در کمتر از یک روز پاسخ بدم

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

خیلی خیلی دمت گرم عالی بود

ارسال نظر