ویدیو آموزش کلاس های abstract در پایتون
September 2019
کلاس های انتزاعی در پایتون به کلاس هایی گفته میشوند که پایه کلاس های دیگر هستند. کلاس های انتزاعی به خودی خود کار خاصی انجام نمیدهند فقط رفتار کلی کلاس های فرزند را مشخص میکنند
در مثال زیر ما دوتا کلاس داریم به اسم 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()
برای اطلاعات بیشتر ویدیو رو تماشا کنید
mahdi
February 2022پاسخ به نظر
خیلی عالی است
پاسخ به نظر
pilepily
September 2021پاسخ به نظر
بسیارعالی
خدا خیرت بده
پاسخ به نظر
نوری
July 2021پاسخ به نظر
دمت گرم.دن بیدرم نتونست انقد روون مسه شما یاد بده.دمت گرم
پاسخ به نظر
مهدی اسدزاده
May 2021پاسخ به نظر
مرسی عالی بود
فک کنم داخل ایران فقط شما این موارد رو تدریس کردین با تشکر فراوان
پاسخ به نظر
امیر
February 2021پاسخ به نظر
سلام.
ویدیو بعدی برای abstract ها را تولید نمی کنید؟؟؟؟؟؟؟
پاسخ به نظر
امیرحسین بیگدلو
February 2021سلام
الآن یکم سرم شلوغه. وقت کنم ضبط میکنم.