خب خب خب شیگرایی در پایتون🚀
شیگرایی تو پایتون فقط محدود به تعریف کلاسها و متدهای ساده نیست. این زبان امکانات پیشرفتهتری هم داره که با یاد گرفتنشون میتونید کدهای بهینهتر، استانداردتر و انعطافپذیرتری بنویسید. بیاید چند تا از این مفاهیم رو بررسی کنیم.
1⃣ متاکلاسها🕵️♂️
متاکلاسها این امکان رو میدن که قبل از ایجاد یک کلاس، ساختارش رو کنترل کنی. میتونی مطمئن شی که قوانین خاصی رعایت شدن یا حتی رفتار کلاس رو دستکاری کنی.
مثال:
اطمینان از تعریف متد greet در کلاس
💡 چی شد؟
ترکیب یا Composition یک راه انعطافپذیرتر برای ساختار دادن به کلاسهات هست. این روش بهت کمک میکنه وابستگیها رو کم کنی و کدهات قابل نگهداریتر باشن.
مثال: تعریف ماشین با استفاده از موتور
💡 چی شد؟
ویژگی های (attributes) هر آبجکت در پایتون به صورت پیشفرض در یک دیکشنری ذخیره میشن که حافظه زیادی مصرف میکنه. با slots میتونی این دیکشنری رو حذف کنی و مصرف حافظه رو کاهش بدی.
مثال: استفاده از slots برای بهینهسازی
💡 چی شد؟
4⃣ Abstract Base Classes 🎯
کلاسهای پایه انتزاعی (ABC) تضمین میکنن که کلاسهای فرزند متدهای مشخصی رو پیادهسازی کنن. این کار طراحی رو مطمئنتر و کدها رو خواناتر میکنه.
مثال: طراحی یک کلاس پایه برای اشکال هندسی
💡 چی شد؟
جمعبندی ✍
این نکات فقط نوک کوه یخه اگه میخوای عمیق تر بشی، کتاب Fluent Python یکی از بهترین منابعه.
➖➖➖➖➖➖➖➖➖
شیگرایی تو پایتون فقط محدود به تعریف کلاسها و متدهای ساده نیست. این زبان امکانات پیشرفتهتری هم داره که با یاد گرفتنشون میتونید کدهای بهینهتر، استانداردتر و انعطافپذیرتری بنویسید. بیاید چند تا از این مفاهیم رو بررسی کنیم.
1⃣ متاکلاسها🕵️♂️
متاکلاسها این امکان رو میدن که قبل از ایجاد یک کلاس، ساختارش رو کنترل کنی. میتونی مطمئن شی که قوانین خاصی رعایت شدن یا حتی رفتار کلاس رو دستکاری کنی.
مثال:
اطمینان از تعریف متد greet در کلاس
class Meta(type):
def __new__(cls, name, bases, dct):
# Ensure 'greet' method exists in the class
if 'greet' not in dct:
raise TypeError(f"Class '{name}' must define 'greet' method")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
def greet(self):
return "Hello, world!"
obj = MyClass()
print(obj.greet()) # Output: Hello, world!
💡 چی شد؟
متاکلاس Meta بررسی میکنه که متد greet توی هر کلاسی که ازش استفاده میکنه، حتماً تعریف شده باشه. با این کار، خطاها زودتر شناسایی میشن و کدت تمیزتر میمونه.2⃣ Composition به جای ارثبری 🔗
ترکیب یا Composition یک راه انعطافپذیرتر برای ساختار دادن به کلاسهات هست. این روش بهت کمک میکنه وابستگیها رو کم کنی و کدهات قابل نگهداریتر باشن.
مثال: تعریف ماشین با استفاده از موتور
class Engine:
def start(self):
return "Engine started"
class Car:
def __init__(self):
self.engine = Engine() # Engine is a part of Car
def start(self):
return self.engine.start() # Delegate starting to Engine
car = Car()
print(car.start()) # Output: Engine started
💡 چی شد؟
به جای این که ماشین از موتور ارثبری کنه، موتور به عنوان یک جزء در ماشین ترکیب شده. این یعنی موتور رو میتونی راحت عوض کنی بدون این که ساختار کلی ماشین به مشکل بخوره.3⃣ بهینهسازی حافظه با slots 🧠
ویژگی های (attributes) هر آبجکت در پایتون به صورت پیشفرض در یک دیکشنری ذخیره میشن که حافظه زیادی مصرف میکنه. با slots میتونی این دیکشنری رو حذف کنی و مصرف حافظه رو کاهش بدی.
مثال: استفاده از slots برای بهینهسازی
class MyClass:
__slots__ = ['name', 'age'] # Restrict attributes to these two
obj = MyClass()
obj.name = "Alice"
obj.age = 25
💡 چی شد؟
ویژگیهای آبجکت فقط محدود به name و age هستن و هیچ فضای اضافی برای دیکشنری داخلی استفاده نمیشه. این روش توی سیستمهایی با تعداد آبجکت زیاد، تفاوت بزرگی ایجاد میکنه.
4⃣ Abstract Base Classes 🎯
کلاسهای پایه انتزاعی (ABC) تضمین میکنن که کلاسهای فرزند متدهای مشخصی رو پیادهسازی کنن. این کار طراحی رو مطمئنتر و کدها رو خواناتر میکنه.
مثال: طراحی یک کلاس پایه برای اشکال هندسی
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
"""Calculate the area of the shape"""
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2 # Area formula for a circle
circle = Circle(5)
print(circle.area()) # Output: 78.5
💡 چی شد؟
کلاس Shape تضمین میکنه که همهی اشکال فرزند متد area رو داشته باشن. بدون این متد، ساختن کلاس فرزند امکانپذیر نیست.
جمعبندی ✍
این نکات فقط نوک کوه یخه اگه میخوای عمیق تر بشی، کتاب Fluent Python یکی از بهترین منابعه.
#programming #python #oop
➖➖➖➖➖➖➖➖➖
🔆 CHANNEL | GROUP
O’Reilly Online Learning
Fluent Python
Python’s simplicity lets you become productive quickly, but this often means you aren’t using everything it has to offer. With this hands-on guide, you’ll learn how to write effective, idiomatic … - Selection from Fluent Python [Book]
1👍14🔥2❤1