پرسش

استفاده از __slots__ در پایتون

Usage of __slots__ in Python

ویژگی __slots__ در پایتون چیه و چطور میشه از اون استفاده کرد؟ چه مزایا و معایبی داره و در چه مواقعی بهتره از اون استفاده کنیم؟

1403/06/05
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

ویژگی __slots__ در پایتون می‌تونه به شما کمک کنه تا مصرف حافظه رو کاهش بدید و عملکرد برنامه رو بهبود ببخشید.

به طور پیش‌فرض، پایتون برای هر شیء که ایجاد می‌کنید، یک دیکشنری (dictionary) به نام __dict__ ایجاد می‌کنه که ویژگی‌ها و مقادیر آن شیء رو در خودش ذخیره می‌کنه. این دیکشنری به شما این امکان رو می‌ده که ویژگی‌های جدیدی به شیء اضافه کنید.

اما این دیکشنری همیشه به مقداری حافظه نیاز داره و ممکنه در مواردی که تعداد زیادی شیء دارید، مصرف حافظه زیاد بشه.

ویژگی __slots__

وقتی شما از __slots__ استفاده می‌کنید، به پایتون می‌گید که فقط ویژگی‌های خاصی رو برای اون کلاس مجاز کنه. این به معنی اینه که فضای حافظه کمتری برای هر شیء نیاز دارید، چون دیگه دیکشنری __dict__ وجود نداره.

نحوه استفاده

برای استفاده از __slots__، شما باید ویژگی‌هایی که می‌خواهید در کلاس تعریف کنید رو به صورت لیستی از نام‌های رشته‌ای در متغیر __slots__ مشخص کنید.

مثال ساده:

class Point:
    __slots__ = ['x', 'y']
    def __init__(self, x, y):
        self.x = x
        self.y = y
p = Point(10, 20)
print(p.x, p.y)  
# output: 10 20
# The following error is due to the use of unauthorized features
p.z = 30  # This gives an error

مزایا و معایب

مزایا:

- کاهش مصرف حافظه به خاطر عدم نیاز به __dict__.

- بهبود عملکرد در برخی مواقع، به ویژه در کلاس‌هایی با تعداد زیاد اشیاء.

معایب:

- عدم امکان اضافه کردن ویژگی‌های جدید به اشیاء کلاس.

- پیچیدگی بیشتر در استفاده از وراثت و دیگر امکانات پایتون.

در کل، استفاده از __slots__ می‌تونه به بهینه‌سازی مصرف حافظه کمک کنه، مخصوصاً زمانی که تعداد زیادی شیء از یک کلاس دارید و ویژگی‌های زیادی ندارید.

پاسخ: 1403/06/05
آخرین آپدیت: 1403/08/08