নোট-ইমপ্লিমেন্টেড ইরার উত্থাপনের পরিবর্তে কেন নোটইম্প্লিমেন্টেড ফেরত আসবে


281

পাইথনের একটি সিঙ্গলটন রয়েছে NotImplemented

কেন কেউ ব্যাতিক্রম NotImplementedবাড়ানোর পরিবর্তে সর্বদা ফিরে আসতে চাইবে NotImplementedError? এটি কী কেবলমাত্র অবৈধ পদ্ধতিগুলি কার্যকর করে এমন কোডের মতো ত্রুটিগুলি খুঁজে পাওয়া আরও কঠিন করে তুলবে না?

উত্তর:


280

এটি কারণ __lt__()এবং সম্পর্কিত তুলনা পদ্ধতিগুলি বেশিরভাগ অপ্রত্যক্ষভাবে তালিকা আকারে এবং যেমন ব্যবহার করা হয়। কখনও কখনও অ্যালগরিদম অন্য কোনও উপায়ে চেষ্টা বা ডিফল্ট বিজয়ী বাছাই করতে পছন্দ করে। ব্যতিক্রম উত্থাপন যদি ধরা না পড়ে বাছাই করে ফেলে, তবে NotImplementedউত্থাপিত হয় না এবং আরও পরীক্ষায় ব্যবহার করা যেতে পারে।

http://jcalderone.livejournal.com/32837.html

এই লিঙ্কটি সংক্ষেপে:

" NotImplementedরানটাইম এটি অন্য কাউকে জিজ্ঞাসা অপারেশন সন্তুষ্ট উচিত সংকেত। এক্সপ্রেশনে a == b, যদি a.__eq__(b)আয় NotImplemented, তারপর পাইথন চেষ্টা b.__eq__(a)। যদি bফিরে যাওয়ার যথেষ্ট জানে Trueবা False, তারপর অভিব্যক্তি সফল করতে পারেন। না হলে এটি কাজ করবে, তারপর রানটাইম হবে অন্তর্নির্মিত আচরণের পিছনে পড়ে যান (যা পরিচয়ের ভিত্তিতে ==এবং !=) "


5
আমি এটি ব্যবহারে সতর্কতা অবলম্বন করব, কারণ এই লিঙ্কটি নথির শেষের দিকে চিহ্নিত করেছে near
জেসন কুন

16
পাইথন ইন্টারপ্রেটার a.__eq__(b)নটইম্প্লিমেন্টেড ফিরিয়ে দিয়েছে কিনা তা পরীক্ষা করে দেখলে, ঠিক তার পরিবর্তে নোটইম্প্লেমেন্টেড এরিরটিকে সহজেই ধরা যায় না (এবং কল করুন b.__eq__(a)বা তারপরে যা কিছু হোক)?
ভিকি

24
@Veky। একটি ব্যতিক্রম উত্থাপন সম্ভবত একটি উচ্চ ওভারহেড আছে। বাছাইয়ের ক্রিয়াকলাপে যে কোনও ওভারহেড তালিকার আকার দ্বারা প্রসারিত হবে তাই পার্থক্যটি খুব কম হলেও এটি একটি দ্রুত বাস্তবায়নের সন্ধান করতে বুদ্ধিমান হতে পারে। আপনি আপনার লুপগুলি ভেঙে ফেলা এবং পুনরায় প্রবেশ করাতে চাইছেন না যা চেষ্টা / ক্যাপ বাস্তবায়ন প্রয়োজন।
SpliFF

3
প্রথম পয়েন্টের জন্য, আরও দ্রুত সমাধানটি হ'ল স্বয়ংক্রিয়ভাবে এলটিটিকে বিপরীত জিটি হিসাবে সংশ্লেষিত করা হবে, সর্বদা এমন কিছু কল করার পরিবর্তে যা নটইম্প্লেমেটেড ফিরে আসবে - এবং পাইথন এটি করে না। আমি মনে করি না গতি এখানে কারণ। এবং দ্বিতীয়টির জন্য, আপনি কী বলছেন তা আমি বুঝতে পারি না: রিটার্নের জন্য উত্থাপনের মতো লুপগুলি ভেঙে ফেলতে হবে। প্রকৃতপক্ষে, আপনি রিটার্নটিকে একটি বিশেষ রিটার্ন ব্যতিক্রম হিসাবে উত্থাপন হিসাবে কল্পনা করতে পারেন, যা সর্বদা কলিংয়ের সুযোগে ধরা পড়ে।
ভেকি

2
>> "তালিকার আকার দ্বারা প্রসারিত" কমপক্ষে, যদি না আপনার কোনও ও (এন) বাছাই না থাকে তবে বিশ্বের সম্পর্কে জানা উচিত।
জোনাথন হার্টলি

106

কারণ তাদের বিভিন্ন ব্যবহারের কেস রয়েছে।

দস্তাবেজের উদ্ধৃতি (পাইথন ৩.on):

NotImplemented

বাইনারি বিশেষ পদ্ধতি দ্বারা ফিরিয়ে দিতে হবে (যেমন __eq__(), __lt__(), __add__(), __rsub__(), ইত্যাদি) নির্দেশ করে অপারেশন অন্য ধরনের সম্মান সঙ্গে বাস্তবায়িত হয়নি

ব্যতিক্রম NotImplementedError

[...] ব্যবহারকারীর সংজ্ঞায়িত বেস ক্লাসগুলিতে, বিমূর্ত পদ্ধতিগুলি এই ব্যতিক্রমটি উত্থাপন করে যখন তাদের যখন পদ্ধতিটি ওভাররাইড করার জন্য উদ্ভূত শ্রেণীর প্রয়োজন হয় বা শ্রেণিটি বিকাশ করা হচ্ছে তখনই বোঝা যায় যে বাস্তব বাস্তবায়ন এখনও যুক্ত করা দরকার।

বিস্তারিত জানার জন্য লিঙ্কগুলি দেখুন।


13

একটি কারণ পারফরম্যান্স। সমৃদ্ধ তুলনার মতো পরিস্থিতিতে, যেখানে আপনি অল্প সময়ের মধ্যে প্রচুর অপারেশন করতে পারবেন, প্রচুর ব্যতিক্রম স্থাপন এবং পরিচালনা করা কেবল কোনও NotImplementedমান ফেরত দেওয়ার চেয়ে অনেক বেশি সময় নিতে পারে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.