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

كيف يمكنني توسيع أنواع Python المضمنة باستخدام أساليب وسمات مخصصة؟

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

How can I extend built-in Python types with custom methods and attributes?

توسيع أنواع Python المضمنة باستخدام الأساليب والسمات المخصصة

في Python، قد تواجه سيناريوهات حيث ترغب في توسيع المضمنة في أنواع ذات طرق أو سمات إضافية. ومع ذلك، لا يجوز تغيير هذه الأنواع بشكل مباشر.

على سبيل المثال، إذا حاولت إضافة طريقة helloWorld() إلى نوع الإملاء كما هو موضح في JavaScript، فستجد أن مثل هذا الأسلوب غير مدعوم.

الحل البديل باستخدام الفئات الفرعية واستبدال مساحة الاسم

على الرغم من أنه لا يمكنك زيادة النوع الأصلي بشكل مباشر، إلا أنه يوجد حل بديل ذكي. من خلال تصنيف النوع المستهدف واستبداله لاحقًا ضمن مساحة الاسم المضمنة/العامة، يمكنك محاكاة السلوك المطلوب بشكل فعال.

إليك تطبيق في بايثون:

# Built-in namespace
import __builtin__

# Extended subclass
class mystr(str):
    def first_last(self):
        if self:
            return self[0]   self[-1]
        else:
            return ''

# Substitute the original str with the subclass on the built-in namespace    
__builtin__.str = mystr

print(str(1234).first_last())  # 14
print(str(0).first_last())  # 00
print(str('').first_last())  # ''

# Note that objects created by literal syntax will not have the extended methods
print('0'.first_last())  # AttributeError: 'str' object has no attribute 'first_last'
في هذا المثال، تقوم الفئة الفرعية mystr بتوسيع نوع str عن طريق إضافة طريقة first_last(). تقوم مهمة __builtin__.str بإعادة توجيه كافة استدعاءات str المضمنة لاستخدام الفئة الفرعية المعدلة بدلاً من ذلك. ونتيجة لذلك، فإن الكائنات التي تم إنشاء مثيل لها باستخدام مُنشئ str() المضمن تمتلك الآن الأسلوب first_last().

ومع ذلك، من المهم ملاحظة أن الكائنات التي تم إنشاؤها باستخدام بناء الجملة الحرفي ("سلسلة") ستظل مثيلات لـ نوع str غير المعدل ولن يرث الطرق المخصصة.

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

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

Copyright© 2022 湘ICP备2022001581号-3