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

مبدأ عمل Python metaclass وإنشاء فئة وتخصيصها

نشر في 2025-04-30
تصفح:551

How Do Metaclasses Work in Python to Create and Customize Classes?

ما هي metaclasses في python؟

مثلما تنشئ الفصول مثيلات ، تنشئ metaclasses دروسًا. أنها توفر طبقة من التحكم في عملية إنشاء الفصل ، مما يسمح بتخصيص سلوك الفئة والسمات. هذا يعني أن الفصول نفسها هي مثيلات تم إنشاؤها من "وصف" للفصل باستخدام الكلمة الرئيسية للفصل. وبالتالي ، فإن العبارة التالية تنشئ كائن فئة باسم ObjectCreator:

كائن فئة (كائن): تمرير

إنشاء فئات ديناميكية

class ObjectCreator(object):
    pass

foo = type ('foo' ، () ، {'bar': true}) Print (foo) # print (foo.bar) # True

metaclasses (فئة الفئات)

هم "الأشياء" التي تخلق هذه الكائنات الفئة. مثلما تنشئ الفصول مثيلات ، تنشئ metaclasses دروسًا. إنها بشكل فعال الفئات وراء الكواليس التي يستخدمها Python تلقائيًا لإنشاء فئات محددة باستخدام الكلمة الرئيسية للفئة.
Foo = type('Foo', (), {'bar': True})
print(Foo)  # 
print(Foo.bar)  # True
السمة

في Python 3 ، تم استبدال هذا بوسيطة الكلمات الرئيسية في قائمة الفئات الأساسية.

# Python 2 class foo (كائن ، __metaclass __ = mymetaclass): ... # بيثون 3 فئة foo (كائن ، metaclass = mymetaclass): ...

metaclasses مخصصة في العمل يمكن أن يقوم metaclass بتعديل الفصل الذي يخلقه ، مما يسمح بسلوك الفئة الديناميكية. على سبيل المثال ، يمكنك تحديد metaclass التي تقوم تلقائيًا بتحويل جميع سمات الفئة إلى الحرف الكبيرة:

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'

لماذا تستخدم metaclasses؟ على سبيل المثال ، يستخدم Django's ORM metaclasses للسماح لك بتحديد حقول قاعدة البيانات باستخدام عبارات بسيطة مثل charfield و integerfield. ومع ذلك ، من المهم أن نلاحظ أنها معقدة ويجب استخدامها فقط عند الضرورة لتجنب المضاعفات غير الضرورية.

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

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

Copyright© 2022 湘ICP备2022001581号-3