نوع واحد من مصممي الديكور هم أصحاب الممتلكات والمستوطنون. تسمح أدوات الديكور هذه بالوصول المتحكم إلى المتغيرات في مثيلات الفئة.
تم تصميم حروف الملكية ومحدداتها خصيصًا للتحكم في السمات في البرمجة الموجهة للكائنات. تختلف هذه عن أدوات تزيين الوظائف من حيث أنها تُستخدم لسمات الفئة (راجع مشاركتي حول أدوات تزيين الوظائف هنا).
يقوم كل من مصممي الوظائف ومصممي getter وsetter بتعديل الكود باستخدام كود قابل لإعادة الاستخدام واستخدام بناء الجملة '@'. كلاهما يغير وظيفة الكود.
حسنًا، دعنا نتناول الأمر.
يتم تطبيق حروف الملكية ومحدداتها على الأساليب داخل الفصل لتحديد السلوكيات المختلفة. يقوم setter بتعيين السمة إلى قيمة، ويقوم getter بالحصول على سمة من الفصل الدراسي. السمة هي set أولاً.
دعونا نلقي نظرة على مثال، ثم سنفصله:
class Shoe: def __init__(self, brand = "Adidas", size = 9): self.brand = brand self.size = size self._condition = "New" @property def size(self): """The size property""" return self._size @size.setter def size(self, size): """size must be an integer""" if isinstance(size, int): self._size = size else: print("size must be an integer") def cobble(self): """Repairs the shoe and sets the condition to 'New'.""" self.condition = "New" print("Your shoe is as good as new!") @property def condition(self): """The condition property""" return self._condition @condition.setter def condition(self, condition): self._condition = condition
دعونا نستعرض بعضًا من هذا الرمز:
تشير الشرطات السفلية قبل بعض السمات (الحالة والحجم) للمطور إلى أنها خاصة؛ وهي خاصة بكل مثيل لفئة الحذاء (كل حذاء، بأحرف صغيرة).
قد تلاحظ أن الحالة والحجم تم إنشاءهما بشكل مختلف. self._condition = "New" يعني أنه يتم إنشاء مثيل لكل مثيل (أو كائن) لفئة الحذاء بشرط "جديد". يتم فعل الشيء نفسه مع سمة الحجم، ولكن لا تتم كتابتها كـ self._size = 9 بحيث تؤدي إلى التحقق من صحة خاصية الضبط، لأن الحجم يجب أن يكون عددًا صحيحًا (هذه عملية تسمى التحقق من الصحة). نحن نقوم بتعيين حالة كل كائن حذاء بشكل مباشر، بدلاً من تشغيله من خلال أساليب ضبط الخاصية و getter.
لا تحتاج طريقة الرصف إلى مصمم ديكور لأنها ببساطة تؤدي إجراءً، ولا تحصل على/تعيين سمة لكل كائن حذاء.
فلنجري تغييرًا نهائيًا على الكود الخاص بنا. على سبيل المثال، ماذا لو أردنا التأكد من عدم إمكانية تغيير سمة الحجم لاحقًا؟ بعد كل شيء، الحذاء لا يغير حجمه حقًا، أليس كذلك؟
يمكننا استخدام الدالة hasattr () لإجراء فحص لكل كائن حذاء. هل تحتوي على سمة خاصة للحجم، يُشار إليها بوجود "_size"؟ إذا كان الأمر كذلك، فلا يمكن تغييره. إليك الكود المطبق:
@size.setter def size(self, size): """size must be an integer and can't be changed once set""" if hasattr(self, '_size'): raise AttributeError("Can't change size once set") if isinstance(size, int): self._size = size else: raise ValueError("size must be an integer")
يعد فهم أدوات تحديد الخصائص والحروف أمرًا صعبًا بعض الشيء، ولكن بمجرد فهمها، سوف تقوم ببرمجة بايثون مثل المحترفين!
مصادر:
المواد المدرسية المكواة
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3