"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > Getters وSetters الديكور في بايثون

Getters وSetters الديكور في بايثون

تم النشر بتاريخ 2024-08-27
تصفح:833

Decorator Getters and Setters in Python

نوع واحد من مصممي الديكور هم أصحاب الممتلكات والمستوطنون. تسمح أدوات الديكور هذه بالوصول المتحكم إلى المتغيرات في مثيلات الفئة.

تم تصميم حروف الملكية ومحدداتها خصيصًا للتحكم في السمات في البرمجة الموجهة للكائنات. تختلف هذه عن أدوات تزيين الوظائف من حيث أنها تُستخدم لسمات الفئة (راجع مشاركتي حول أدوات تزيين الوظائف هنا).

يقوم كل من مصممي الوظائف ومصممي 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")

يعد فهم أدوات تحديد الخصائص والحروف أمرًا صعبًا بعض الشيء، ولكن بمجرد فهمها، سوف تقوم ببرمجة بايثون مثل المحترفين!

مصادر:

المواد المدرسية المكواة

بيان الافراج تم نشر هذه المقالة على: https://dev.to/tessmueske/decorator-getters-and-setters-in-python-6cd?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3