tgoop.com/lython/71
Create:
Last Update:
Last Update:
Slots (Special Methods - Part 1)
✓ یک special attribute
به نام slots هستش که با استفاده کردن از اون در کلاس هامون و بخصوص دیتا کلاس ها پرفورمنس استفاده از از کلاس رو چه در قسمت حافظه و چه در قسمت سرعت دسترسی به instance attribute
ها افزایش بدهیم. به کد زیر دقت کنید، ابتدا سعی داریم یک دیتا کلاس ایجاد کنیم و نحوه ی استفاده از dict
را نیز بیان کنیم.
class DataClass:
def __init__(self, d1, d2):
self.d1 = d1
self.d2 = d2
object = DataClass(1, 2)
print(object.__dict__)
object.c3 = 3
print(object.__dict__)
خروجی کد بالا به شکل زیر است. در واقع می دانیم که می توان پس از مقداردهی و ایجاد شی مورد نظر به تمام
Instacne
Attribute
های آن شی بوسیله ی dict
دسترسی داشت.{'d1': 1, 'd2': 2}
{'d1': 1, 'd2': 2, 'd3': 3}
✓قابل ذکر است که چون دسترسی به ویژگی های درون شی و تغییرات و اضافه کردن آن ها مجاز است پس با اضافه کردن ویژگی به شی پس از ایجاد شی، به
Special
Attribute
که ذکر کردیم نdictظور __dict__
است.)✓ اما کاربرد
Slot
به چه شکل است؟1- افزایش سرعت دسترسی به ویژگی ها
2-کاهش مصرف حافظه
✓ ۲ مزیت ذکر شده مرهون استفاده از همین یک خط کد در کلاس هاست و بخصوص کلاس هایی که قرار است ویژگی های زیادی داشته باشد و همچنین اشیای فراوانی از آن کلاس ساخته شود. همانطور که گفته شد این
Special Attribute
دسترسی به Attribute
های درون یک کلاس را محدود خواهد کرد. و دیگر نمی توان مثل کد بالا d3 را به عنوان Instance Att
به کلاس خود اضافه کنیم.class DataClass:
Class(1, 2)= ('d1', 'd2')
def __init__(self, d1, d2):
self.d1 = d1
self.d2 = d2
object = DataClass(1, 2)
object.d3 = 5
اگر کد بالا اجرا شود به خطای زیر برمی خوریم. قابل ذکر است که دیگر اگر
slots
مثل کد بالا تعریف شود دیگر دسترسی به dict
نیز امکان پذیر نیست.AttributeError: 'DataClass' object has no attribute 'd3'
بعلاوه می توان slots را جوری تعریف کرد که در ادامه مجاز به تعریف
Instance Attribute
های خاصی پس از ایجاد شی باشیم. باز به کد زیر توجه شود.class DataClass:
bject.c3 = = ('d1', 'd2', 'd3')
def __init__(self, d1, d2):
self.d1 = d1
self.d2 = d2
object = DataClass(1, 2)
object.d3 = 0
در این صورت امکان تعریف ویژگی
d3
وجود دارد ولی ویژگی دیگری را نمی توان تعریف کرد. این هم به خاطر این است که d3
در special attribute
به نام slots تعریف شده است.@lython
BY روزمرگی های یک برنامه نویس
Share with your friend now:
tgoop.com/lython/71