আফিসিয়াল পাইথন ডকুমেন্টেশন বলে __repr__ ব্যবহার হয় একটি অবজেক্টের "অফিসিয়াল" স্ট্রিং রিপ্রেজেন্টেশন খুঁজে বের করতে এবং __str__ ব্যবহার হয় "অনোফিসিয়াল" স্ট্রিং রিপ্রেজেন্টেশন খুঁজে বের করতে। প্রін্ট স্টেটমেন্ট এবং str() বিল্ট-ইন ফাংশন __str__ ব্যবহার করে অবজেক্টের স্ট্রিং রিপ্রেজেন্টেশন ডিসপ্লে করে যখন repr() বিল্ট-ইন ফাংশন __repr__ ব্যবহার করে অবজেক্ট ডিসপ্লে করে। চলুন একটি উদাহরণ নিয়ে দুটি মেথড আসলে কী করে সেটি বুঝি।
একটি datetime অবজেক্ট তৈরি করি -
>>> import datetime >>> today = datetime.datetime.now() যখন আমি বিল্ট-ইন ফাংশন str() ব্যবহার করি today ডিসপ্লে করতে: >>> str(today) '2018-01-12 09:21:58.130922'
দেখলাম ডেটটি একটি স্ট্রিং হিসেবে প্রদর্শিত হয়েছে এমনভাবে যে ব্যবহারকারী ডেট ও টাইম বুঝতে পারে। এখন দেখি বিল্ট-ইন ফাংশন repr() ব্যবহার করলে-
>>> repr(today) 'datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)'
দেখলাম এটিও একটি স্ট্রিং রিটার্ন করেছে কিন্তু স্ট্রিংটি datetime অবজেক্টের "অফিসিয়াল" রিপ্রেজেন্টেশন যার মানে এই "অফিসিয়াল" স্ট্রিং রিপ্রেজেন্টেশন অবজেক্টটি রিকনস্ট্রাক্ট করতে পারে -
>>> eval('datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)') datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)eval() বিল্ট-ইন ফাংশন একটি স্ট্রিং গ্রহণ করে এবং সেটি datetime অবজেক্টে কনভার্ট করে।
অতএব সাধারণত আমরা যে ক্লাস কোড করি সেগুলোতে __repr__ অবশ্যই থাকা উচিত এবং যদি আপনি মনে করেন অবজেক্টের একটি স্ট্রিং ভার্সন উপকারী হবে, datetime-এর কেসের মত, তবে __str__ ফাংশন তৈরি করুন।