"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تحديد خصائص الفئة في بايثون: هل يوجد مصمم @classproperty مشابه لـclassmethod؟

كيفية تحديد خصائص الفئة في بايثون: هل يوجد مصمم @classproperty مشابه لـclassmethod؟

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

How to Define Class Properties in Python: Is there a @classproperty decorator similar to @classmethod?

كيفية تحديد خصائص الفصل في بايثون

في بايثون، يمكنك إضافة توابع إلى فصل دراسي باستخدام مصمم @classmethod. ولكن هل هناك آلية مماثلة لتحديد خصائص الفئة؟

بالتأكيد. توفر بايثون مصمم الديكور @classproperty لهذا الغرض. يشبه بناء الجملة واستخدامه إلى حد كبير صياغة @classmethod:

class Example(object):
    the_I = 10
    
    @classproperty
    def I(cls):
        return cls.the_I

يقوم مصمم @classproperty بإنشاء خاصية فئة تسمى I. يمكنك الوصول إلى هذه الخاصية مباشرة على الفئة نفسها، كما يلي:

Example.I  # Returns 10

إذا كنت ترغب في تحديد محدد لخاصية صفك، يمكنك استخدام @classproperty.setter Decorator:

@I.setter
def I(cls, value):
    cls.the_I = value

الآن يمكنك تعيين خاصية الفئة مباشرة:

Example.I = 20  # Sets Example.the_I to 20

المنهج البديل: ClassPropertyDescriptor

إذا كنت تفضل أسلوبًا أكثر مرونة، ففكر في استخدام فئة ClassPropertyDescriptor. وإليك كيفية العمل:

class ClassPropertyDescriptor(object):

    def __init__(self, fget, fset=None):
        self.fget = fget
        self.fset = fset

    # ... (method definitions)

def classproperty(func):
    return ClassPropertyDescriptor(func)

باستخدام هذا الأسلوب، يمكنك تحديد خصائص الفئة على النحو التالي:

class Bar(object):

    _bar = 1

    @classproperty
    def bar(cls):
        return cls._bar

يمكنك تعيين خاصية الفئة باستخدام أداة ضبطها (إذا تم تحديدها) أو عن طريق تعديل السمة الأساسية الخاصة بها:

Bar.bar = 50
Bar._bar = 100

يوفر هذا الحل الموسع مزيدًا من التحكم والمرونة عند العمل مع خصائص الفصل في Python.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3