logo

ما هي كتابة البطة في بايثون؟

في هذا البرنامج التعليمي، سوف نتعلم كيفية كتابة البطة. وهو مصطلح شائع في بايثون، ويأتي من القول، 'إذا كانت تمشي مثل البطة، وتسبح مثل البطة، وتبدو مثل البطة، فمن المحتمل أن تكون بطة.'

البيان أعلاه يعطي فكرة لتحديد البطة. هنا لا نحتاج إلى تسلسل جينومي للبط. ونستخلص استنتاجنا من سلوكه ومظاهره الخارجية.

سنناقش ما يعنيه بالضبط كتابة البطة في برمجة بايثون.

بايثون يتبع EAFP (الاستغفار أسهل من الإذن) بدلاً من LBLY فلسفة (انظر قبل أن تقفز). يرتبط EAFP إلى حد ما بأسلوب 'كتابة البط'.

الكتابة الديناميكية مقابل الكتابة الثابتة

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

مثال -

 x = 12000 print(type(x)) x = 'Dynamic Typing' print(type(x)) x = [1, 2, 3, 4] print(type(x)) 

انتاج:

يلقي int إلى سلسلة جافا
 

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

العديد من لغات البرمجة الأخرى مثل Java وSwift هي من النوع الثابت. نحن بحاجة إلى إعلان متغير مع أنواع البيانات. في المثال أدناه، نحاول أن نفعل نفس الشيء باستخدام Swift بدلاً من Python.

مثال -

 # integer value assigning in JavaScript var a = 10 # Assinging string in swift a = 'Swift language' 

لا يمكن تجميع التعليمات البرمجية أعلاه، لأننا لم نتمكن من تعيين سلسلة في لغة Swift. لأن متغير أ تم إعلانه كعدد صحيح.

بروتوكولات طبقة ربط البيانات

مفهوم كتابة البط

لقد ناقشنا سابقًا أن لغة بايثون هي لغة ديناميكية مكتوبة. ومع ذلك، يمكننا استخدام النهج الديناميكي مع أنواع البيانات المخصصة. دعونا نفهم المثال التالي.

مثال -

 class VisualStudio: def execute(self): print('Compiling') print('Running') print('Spell Check') print('Convention Check') class Desktop: def code(self, ide): ide.execute() ide = VisualStudio() desk = Desktop() desk.code(ide) 

انتاج:

 Compiling Running Spell Check Convention Check 

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

دعونا نرى مثالا آخر.

مثال - 2

جافا قابلة للمقارنة
 class Duck: def swim(self): print('I'm a duck, and I can swim.') class Sparrow: def swim(self): print('I'm a sparrow, and I can swim.') class Crocodile: def swim_walk(self): print('I'm a Crocodile, and I can swim, but not quack.') def duck_testing(animal): animal.swim() duck_testing(Duck()) duck_testing(Sparrow()) duck_testing(Crocodile()) 

انتاج:

 I'm a duck, and I can swim. I'm a sparrow, and I can swim. Traceback (most recent call last): File '', line 24, in File '', line 19, in duck_testing AttributeError: 'Crocodile' object has no attribute 'swim' 

في الكود أعلاه، ينعكس مثيل فئة Duck عن طريق الاتصال اختبار البطة وظيفة. ويحدث هذا أيضًا مع فئة Sparrow، التي تنفذ السباحة () وظيفة. ولكن في حالة فئة التمساح، فإنها تفشل في تقييم اختبار البط لأنها لا تنفذ السباحة () وظيفة.

كيف تدعم كتابة البطة EAFP

تعد كتابة البطة هي الأسلوب الأكثر ملاءمة لـ EAFP لأننا لا نحتاج إلى التركيز على 'يكتب' من الكائن. نحن بحاجة فقط لرعاية لها سلوك و الإمكانية . دعونا نرى العبارات التالية.

عندما نرى الكثير من الكتل if-else، فهذا هو نمط ترميز LBYL.

ولكن إذا رأينا الكثير من عمليات المحاولة باستثناء الكتل، فمن المحتمل أن يكون مبرمج EAFP.