مثلما تنشئ الفصول مثيلات ، تنشئ metaclasses دروسًا. أنها توفر طبقة من التحكم في عملية إنشاء الفصل ، مما يسمح بتخصيص سلوك الفئة والسمات. هذا يعني أن الفصول نفسها هي مثيلات تم إنشاؤها من "وصف" للفصل باستخدام الكلمة الرئيسية للفصل. وبالتالي ، فإن العبارة التالية تنشئ كائن فئة باسم ObjectCreator:
إنشاء فئات ديناميكية
class ObjectCreator(object): pass
metaclasses (فئة الفئات)
هم "الأشياء" التي تخلق هذه الكائنات الفئة. مثلما تنشئ الفصول مثيلات ، تنشئ metaclasses دروسًا. إنها بشكل فعال الفئات وراء الكواليس التي يستخدمها Python تلقائيًا لإنشاء فئات محددة باستخدام الكلمة الرئيسية للفئة.Foo = type('Foo', (), {'bar': True}) print(Foo) #السمةprint(Foo.bar) # True
# Python 2 class foo (كائن ، __metaclass __ = mymetaclass): ... # بيثون 3 فئة foo (كائن ، metaclass = mymetaclass): ...
class upperattrmetaclass (type): def __new __ (cls ، clsname ، القواعد ، attrs): agresscase_attrs = { attr if attr.startswith ('__') آخر attr.upper (): v لـ attr ، v في attrs.items () } return super () .__ new __ (cls ، clsname ، bases ، uppercase_attrs)
# Python 2 class Foo(object, __metaclass__=MyMetaclass): ... # Python 3 class Foo(object, metaclass=MyMetaclass): ...BAR = 'BIP' print (foo.bar) # 'bip'
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3