ویدیو آموزش کلاس های abstract در پایتون

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

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

در مثال زیر ما دوتا کلاس داریم به اسم A و ‌‌B که کلاس B داره از کلاس A ارث بری میکنه.
 

class A:
	def show(self):
		pass

class B(A):
	pass

در کلاس A یک متد به نام show وجود داره. در کد بالا کلاس B میتونه متد show رو نادیده بگیره و بازنویسیش نکنه.
اما اگه بخواید حالتی رو بوجود بیارید که کلاس B مجبور به بازنویسی متد show شود میتونید از AbstractClass استفاده کنید.

from abc import ABC

class A(ABC):
	def show(self):
		pass

class B(A):
	pass

b1 = B()

در کد بالا کلاس A رو به یک کلاس انتزاعی تبدیل کردیم. همینطور که میبینید برای این کار از ماژول abc کلاس ABC رو وارد کردیم. کلاس ABC به شما اجازه میده کلاس هاتون رو انتزاعی کنید تا بقیه کلاس ها فرزند مجبور به بازنویسی متدهاش بشن. در کد بالا کلاس B متد show رو بازنویسی نکرده و انتظار داریم که پایتون بهمون ارور بده. اما اگه کد بالا رو اجرا کنید میبینید که اتفاقی نمیفته. چرا؟ چون پایتون اعتقادی به زور کردن یک موضوع نداره. اون کلاس ABC که کلاس A داره ازش ارث بری میکنه بیشتر یک حالت نمایشی داره تا برنامه نویس بفهمه که داره از یک کلاس انتزاعی ارثبری میکنه. اما اگه احیانا دلتون بخواد واقعا برنامه نویس رو مجبور به بازنویسی کنید میتونید متدهاتون رو هم به شکل انتزاعی دربیارید:

from abc import ABC, abstractmethod

class A(ABC):
	@abstractmethod
	def show(self):
		pass

class B(A):
	pass

b1 = B()

از داخل ماژول abc ما دکوراتور absractmethod رو وارد کردیم و به متدمون دادیم. حالا دیگه کلاس  B مجبور به بازنویسی متد show خواهد بود. کد بالا رو که اجرا کنید به شکل زیر به شما ارور میده:

TypeError: Cant instantiate abstract class B with abstract methods show

حالا دیگه مجبورید متد show رو بازنویسی کنید. به شکل زیر:

from abc import ABC, abstractmethod

class A(ABC):
	@abstractmethod
	def show(self):
		pass

class B(A):
	def show(self):
		print('Show method...')

b1 = B()
b1.show()

برای اطلاعات بیشتر ویدیو رو تماشا کنید

ویدیوهای مشابه



ارسال نظر


Reza

1 سال قبل پاسخ به نظر

سلام من یکم نفهمیدم درست کامنت پایینم خوندم ولی باز متوجه نشدم فرق این mixin ها و abstract ها در چیه ؟ جفتشون که شدن کلاس پایه هستن؟

ارسال نظر



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

1 سال قبل

سلام
mixinها ویژگی ها رو پیاده سازی میکنن اما abstract ها کدی داخل خودشون ندارن.

alirezaghodrati962@gmail.com

1 سال قبل پاسخ به نظر

عالی بود
لطفا ادامه ویدیو هارو ضبط کنید
خیلی ممنون

ارسال نظر



Atefe

1 سال قبل پاسخ به نظر

سلام استاد
abstract هم نوعی mixinها هستند؟

ارسال نظر



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

1 سال قبل

سلام
کلاس های mixin برای اضافه کردن یکسری ویژگی به کلاس پدر استفاده میشن.
کلاس های abstract برای تعیین رفتار کلاس پدر استفاده میشن.
پس mixin ها ممکنه abstract باشن اما abstractها mixin نیستن.

راسد اعظمی

1 سال قبل پاسخ به نظر

خلی عالی دست تان درد نکند امیر جان

ارسال نظر



محمدرضا

1 سال قبل پاسخ به نظر

سلام ، ویدیو های abstract ادامه داره ؟

ارسال نظر



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

1 سال قبل

سلام
هنوز ادامش رو ضبط نکردم.

mahdi

2 سال قبل پاسخ به نظر

خیلی عالی است

ارسال نظر



pilepily

2 سال قبل پاسخ به نظر

بسیارعالی
خدا خیرت بده

ارسال نظر



نوری

2 سال قبل پاسخ به نظر

دمت گرم.دن بیدرم نتونست انقد روون مسه شما یاد بده.دمت گرم

ارسال نظر



مهدی اسدزاده

2 سال قبل پاسخ به نظر

مرسی عالی بود

فک کنم داخل ایران فقط شما این موارد رو تدریس کردین با تشکر فراوان

ارسال نظر



امیر

3 سال قبل پاسخ به نظر

سلام.
ویدیو بعدی برای abstract ها را تولید نمی کنید؟؟؟؟؟؟؟

ارسال نظر



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

3 سال قبل

سلام
الآن یکم سرم شلوغه. وقت کنم ضبط میکنم.

مونگارد