tgoop.com/djangolearn_ir/753
Create:
Last Update:
Last Update:
✅ هر وقت صحبت از شیء گرایی و ارث بری میشه پای Mixin هم میاد وسط. اما دقیقا چیه؟ Mixin توی پایتون یک الگو هستش و کدهایی که از این الگو بهره میبرند کلمهی کلیدی خاصی یا چیز اضافهتری ندارند. فرض کنین ما میخواهیم یک متد جدید به یک کلاس اضافه کنیم تا
کارایی
یا Functionality اون رو زیاد کنیم. اینجا میشه از Mixin استفاده کرد.
مثلا کلاسهای زیر رو در نظر بگیرید.
class Vehicle:
pass
class Car(Vehicle):
pass
class Van(Vehicle):
pass
class Motorcycle(Vehicle):
pass
حالا نیاز داریم که متد play music رو هم به این کلاس ها اضافه کنیم، دوتا راه داریم. اولیش اینه که:
class Vehicle:
pass
class Car(Vehicle):
def play_music(self):
print("play_music")
class Van(Vehicle):
def play_music(self):
print("play_music")
class Motorcycle(Vehicle):
pass
اما یک ایرادی وجود داره. اینجا خودمون رو تکرار کردیم. درواقع اومدیم دوبار یک تکه کد رو تکرار کردیم و این از نظر کدینگ وجه خوبی نداره. پس این راه حل ما نیست.
روش دوم اینه بیایم به بیس کلاسمون یعنی Vehicle یک متد تحت عنوان play_music اضافه کنیم.
class Vehicle:
def play_music(self):
print("play_music")
class Car(Vehicle):
pass
class Van(Vehicle):
pass
class Motorcycle(Vehicle):
pass
اما در این صورت کلاس موتورسیکلت هم دارای رفتار پخش موزیک خواهد شد و این اشتباه است. اینجا است که Mixin خودش رو نشون میده. به کد زیر توجه کنید.
class Vehicle:
pass
class PlayMusicMixin:
def play_music(self):
print("play_music")
class Car(Vehicle, PlayMusicMixin):
pass
class Van(Vehicle, PlayMusicMixin):
pass
class Motorcycle(Vehicle):
pass
درواقع از کلاس PlayMusicMixin قرار نیست هیچ شیٔ ای ساخته شود و صرفا مهم این است که کارایی کلاسهای خاصی را افزایش شود.
پ.ن: اون کلمهی Mixin انتهای اسم کلاس هم قراردادیه، بهتره نوشته بشه ولی اجبار نداره.
BY جنگولرن
Share with your friend now:
tgoop.com/djangolearn_ir/753