في كل مرة نقوم بإنشاء فئة جديدة، يقوم Python بتخزين كل سمة في سمة dict والتي تسمى القاموس الديناميكي. يبدو هذا السلوك الافتراضي ملائمًا، لأنه مرن، ولكن عندما تعمل مع عدد كبير من المثيلات أو يكون استخدام الذاكرة مهمًا، فقد يكون هذا الحمل كبيرًا.
تستخدم بايثون بشكل أساسي قاموسًا لتخزين سمات الفئة، ولكن أحد البدائل هو استخدام الفتحات . من خلال تحديد هذا الاسم، فإننا نطلب من Python استخدام بنية أكثر ثباتًا وإحكامًا مما يقلل بشكل كبير من استخدام الذاكرة. فيما يلي مثال أساسي لكيفية استخدام الفتحات في الفصل الدراسي.
import sys class WithoutSlots: def __init__(self, x, y): self.x = x self.y = y class WithSlots: __slots__ = ['x', 'y'] def __init__(self, x, y): self.x = x self.y = y obj1 = WithoutSlots(1, 2) obj2 = WithSlots(1, 2) print(sys.getsizeof(obj1.__dict__)) # 296 print(sys.getsizeof(obj2)) # 48
كما هو موضح أعلاه، يستخدم "WithoutSlots" ذاكرة أكبر بكثير مقارنة بـ "WithSlots". فكر في إنشاء العديد من مثيلات الفصل - ما هو النهج الذي سيكون الخيار الأفضل؟
قد تكون الفتحات أداة مفيدة، ولكنها تأتي مع قيود:
obj = WithSlots(1, 2) obj.z = 3 # This will raise an AttributeError
الإملاء إلى الفتحة .
: يجب أن تحتوي كل فئة أساسية على فتحات محددة، وإلا ستعود بايثون إلى استخدام القاموس لتخزين سمات المثيل.
متى تستخدمه
لقد قمت بتدوين بعض أفضل أمثلة السيناريوهات حيث يمكننا استخدام ماكينات القمار:عندما يكون لدينا الكثير من المثيلات التي يجب إنشاؤها ويكون استخدام الذاكرة مصدر قلق.
الأفكار النهائية
هذه هي الطريقة التي يتم بها استخدامفي بايثون: يمكنك استخدامها عندما تكون متأكدًا من أنك لن تحتاج إلى أي سمات أخرى لصفك الذي تعمل معه عدد كبير من الحالات. من خلال تحديد الفتحات ، فإنك تطلب من Python استخدام بنية أكثر كفاءة وإحكامًا لتخزين السمات، مما يساعد على توفير الذاكرة. يكون هذا مفيدًا بشكل خاص عندما يكون استخدام الذاكرة أمرًا مثيرًا للقلق أو عندما تحتاج إلى تحسين الأداء. فقط تذكر أنه مع الفتحات ، لا يمكنك إضافة سمات جديدة ديناميكيًا، لذلك من الأفضل استخدامها عندما تكون سمات صفك ثابتة ومحددة جيدًا.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3