Equality ओवरलोड करना
जब आप किसी कस्टम क्लास के दो ऑब्जेक्ट्स की तुलना == से करते हैं, तो Python डिफ़ॉल्ट रूप से केवल ऑब्जेक्ट रेफ़रेंसेज़ की तुलना करता है, ऑब्जेक्ट्स में मौजूद डेटा की नहीं। इस व्यवहार को ओवरराइड करने के लिए, क्लास में विशेष __eq__() मेथड लागू किया जा सकता है, जो दो आर्ग्युमेंट्स लेता है — तुलना किए जाने वाले ऑब्जेक्ट्स — और True या False लौटाता है। यह मेथड तब स्वतः कॉल होता है जब दो ऑब्जेक्ट्स की तुलना की जाती है।
पिछले चैप्टर का BankAccount क्लास आपके लिए स्क्रिप्ट पेन में उपलब्ध है। इसमें एक एट्रिब्यूट balance है और एक withdraw() मेथड है। समान बैलेंस वाले दो बैंक अकाउंट ज़रूरी नहीं कि एक ही अकाउंट हों, लेकिन एक बैंक अकाउंट के पास आमतौर पर एक अकाउंट नंबर होता है, और जिन दो अकाउंट्स के अकाउंट नंबर समान हों, उन्हें समान माना जाना चाहिए।
यह अभ्यास पाठ्यक्रम का हिस्सा है
Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग
अभ्यास निर्देश
लाइन 1-7 के कोड को सिलेक्ट करके "Run code" बटन दबाने की कोशिश कीजिए। फिर कंसोल में कुछ BankAccount ऑब्जेक्ट्स बनाकर उनकी तुलना कीजिए.
__init__()मेथड को मॉडिफ़ाई करें ताकि वह एक नया पैरामीटरnumberले और एक नयाnumberएट्रिब्यूट इनिशियलाइज़ करे।- एक
__eq__()मेथड डिफ़ाइन करें जो तबTrueलौटाए जब दो ऑब्जेक्ट्स केnumberएट्रिब्यूट समान हों। - प्रिंट स्टेटमेंट्स और कंसोल में आने वाले आउटपुट को ध्यान से देखें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
class BankAccount:
# MODIFY to initialize a number attribute
def __init__(self, balance=0):
self.balance = balance
def withdraw(self, amount):
self.balance -= amount
# Define __eq__ that returns True if the number attributes are equal
def ____(____, ____):
return ____.number == ____.____
# Create accounts and compare them
acct1 = BankAccount(123, 1000)
acct2 = BankAccount(123, 1000)
acct3 = BankAccount(456, 1000)
print(acct1 == acct2)
print(acct1 == acct3)