পাইথন ২.x এর তুলনা অপারেটরগুলির ওভারলোডের দুটি উপায় রয়েছে __cmp__
বা "সমৃদ্ধ তুলনা অপারেটরগুলি" যেমন __lt__
। সমৃদ্ধ তুলনা ওভারলোডগুলি অগ্রাধিকার হিসাবে বলা হয়, তবে কেন এটি এমন?
সমৃদ্ধ তুলনা অপারেটরগুলি প্রতিটি বাস্তবায়নের জন্য সহজ, তবে আপনাকে অবশ্যই প্রায় একই রকম যুক্তি দিয়ে তাদের বেশ কয়েকটি বাস্তবায়ন করতে হবে। তবে, আপনি যদি বিল্টিন cmp
এবং টুপল অর্ডার ব্যবহার করতে পারেন তবে __cmp__
বেশ সহজ হয়ে যায় এবং সমস্ত তুলনা পূরণ করে:
class A(object):
def __init__(self, name, age, other):
self.name = name
self.age = age
self.other = other
def __cmp__(self, other):
assert isinstance(other, A) # assumption for this example
return cmp((self.name, self.age, self.other),
(other.name, other.age, other.other))
এই সরলতাটি ধনী তুলনাগুলির সমস্ত 6 (!) ওভারলোডের চেয়ে আমার চাহিদা মেটাচ্ছে বলে মনে হচ্ছে। (যাইহোক, আপনি যদি "অদলবদল যুক্তি" / প্রতিবিম্বিত আচরণের উপর নির্ভর করেন তবে আপনি এটি "ন্যায্য 4" এ নামাতে পারেন, তবে এটি আমার নম্র মতামত হিসাবে জটিলতার জট বাড়িয়েছে))
আমি যদি কেবল ওভারলোড করি তবে আমার কি সচেতন হওয়া দরকার __cmp__
?
আমি বুঝতে পারছি <
, <=
, ==
, ইত্যাদি অপারেটার অন্যান্য কাজের জন্য ওভারলোড হতে পারে, এবং মত কোন বস্তু তারা ফিরে আসতে পারেন। আমি সেই পদ্ধতির গুণাগুণ সম্পর্কে জিজ্ঞাসা করছি না, তবে কেবলমাত্র পার্থক্য সম্পর্কে যখন এই অপারেটরগুলি তুলনা করার জন্য একই অর্থে ব্যবহার করে যা তারা সংখ্যার জন্য বোঝায়।
আপডেট: ক্রিস্টোফার যেমনটি বলেছেন , cmp
3.x সালে অদৃশ্য হয়ে যাচ্ছে উপরের মতো তুলনামূলক বাস্তবায়নকে কী এমন বিকল্প আছে __cmp__
?