در این ویدیو در مورد متدهای 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 باشد.



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

رایگان

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

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



ارسال نظر

برای ارسال نظر باید لاگین کنید

alireza

1 سال قبل

دمت گرم دوره ها بسیار عالی هستن


زینب سادات

1 سال قبل

عالی بود 20 !


حمیده ریاحین

1 سال قبل

سلام استاد
عالی تدریس کردین من 2 پکیج خریدم درباره آموز ش پایتون اما مبحث کلاس برام جا نیفتاده بود ، شیوایی کلامتون در تدریس عالیه .

ممنونم


سروش

1 سال قبل

سلام
چقدر خفن درس میدی مرسی


amir

2 سال قبل

مثل همیشه عالی. دمت گرم


محسن

2 سال قبل

سلام
متشکرم بابت زحمتی که برای تهیه‌ی این دروس کشیدید.
سوالی دارم:
آیا دو خط زیر معادل هم هستند؟ خروجی‌شان یکی‌ست:
()p2.show که p2 یک آبجکت و show تابع است.
print (Person.show(p2)) که person یک کلاس و show یک تابع است.
من از روش دوم (خط دوم) استفاده می‌کنم. منطق خط اول رو متوجه نمیشم. میشه مختصر توضیحی بفرمایید؟


امیرحسین بیگدلو

2 سال قبل

سلام
این دو با هم کاملا متفاوت هستند.
در حالت اول با استفاده از آبجکت به متد دسترسی داشتید و در حالت دوم با کلاس به متد دسترسی پیدا کردید.
در اکثر مواقع با آبجکت به متد دسترسی پیدا میکنیم.

عباس

2 سال قبل

دمت گرم در خصوص تفاوت کلاس متد و استاتیک متد خیلی ساده
و قابل فهم توضیح داد


Shahab

2 سال قبل

سلام.
بسیار ممنونم از زحمتی که کشیدید برای تهیه این همه ویدیو مفید. واقعا استفاده کردم.


Mohammadam

2 سال قبل

با اجازتون من ویدیو ها رو دانلود میکنم. راضی باشید :)


امیرحسین بیگدلو

2 سال قبل

سلام
خواهش میکنم. هر ویدیویی که دوست دارید رو میتونید دانلود کنید

sam

3 سال قبل

درود بر شرافتت که زحمت کشیدی و داری آموزش میدی.درود بر شرافتت


mamali

3 سال قبل

agha i love you dari


Alireza

3 سال قبل

ممنون استاد
خیلی خوب توضیح دادید
به قدری خوب درک کردم که تونستم حتی سن رو از ورودی به 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

3 سال قبل

سلام با سبک توضیحتون بشدت برام راحته اصلا انرژی میگیرم از اینکه تو آموزش بتونم ازتون جلو بیوفتم و واقعا آدم های مثل شما رو تو ذهنم همیشه نیاز داشتم


مریم

3 سال قبل

وقتتون بخیر
بسیار ممنون بابت آموزشهای بسیار عالیتون.
بسیار مفید و کاربردی هستن.
من دنبال آموزش نمودار سازی،متلب ، visulisierung هستم ولی پیدا نکردم
و متاسفانه باکس سرچ هم نبود
ممنون میشم ازتون اگر من رو راهنمایی کنید.


امیرحسین بیگدلو

3 سال قبل

سلام
همچین آموزشی ندارم

عاطفه

3 سال قبل

ممنونم ازتون بالاخره تونستم یکم ذهنمو روشن کنم در مورد این موضوع


Hadi

3 سال قبل

ممنون بابت اموزش هاتون
خیلی ساده و خلاصع میگید
فقط بعضی چیز هارو نگفتید
همه فیلم هاتونم دانلود کرده ام
باتشکر.


امیرحسین بیگدلو

3 سال قبل

سلام
مثلا چی رو نگفتم؟

رامین

3 سال قبل

آقا دس خوش


mojtaba

4 سال قبل

سلام می خواهم class method دانلود کنم ولی نمی شه امکان دانلود از سایت شما وجود نداره؟


امیرحسین بیگدلو

4 سال قبل

سلام
خیر. هیچ ویدیویی از سایت قابل دانلود نیست.

محمد

4 سال قبل

اراِِِیه عالی


اشکان خوش باش

4 سال قبل

من همین مثال رو توی اینترنت پیدا کردم ولی 20 % کارو متوجه نشدم
دیگه با توضیحات خوبتون کامل متوجه شدم


S313

4 سال قبل

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


مونگارد