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