তারিখ ছাড়া সময় নিয়ে কাজ করে এমন একটি ঘড়ি তৈরি করুন।
আপনার এতে মিনিট যোগ ও বিয়োগ করতে পারা উচিত।
একই সময় প্রকাশ করে এমন দুটি ঘড়ি পরস্পরের সমান হওয়া উচিত।
এই অনুশীলনীর পরীক্ষাগুলো আশা করে যে আপনার ক্লকটি একটি Clock class-এর মাধ্যমে ইমপ্লিমেন্ট করা হবে।
Python-এ ক্লাস সম্পর্কে আপনার ধারণা না থাকলে, classes এবং ক্লাস (Python ডকুমেন্টেশন থেকে) শুরুর জন্য ভালো জায়গা।
অবজেক্ট নিয়ে কাজ করার এবং ডিবাগ করার সময়, সেই অবজেক্টের একটি ভালো রিপ্রেজেন্টেশন থাকা জরুরি।
উদাহরণস্বরূপ, Python REPL পরিবেশে আপনি যদি একটি নতুন datetime.datetime অবজেক্ট তৈরি করেন, তাহলে তার স্ট্রিং রিপ্রেজেন্টেশন দেখতে পাবেন:
>>> from datetime import datetime
>>> new_date = datetime(2022, 5, 4)
>>> new_date
datetime.datetime(2022, 5, 4, 0, 0)
আপনার Clock class-এর উচিত একটি কাস্টম object তৈরি করা, যা তারিখ ছাড়া সময় নিয়ে কাজ করে।
এই class-এর একটি গুরুত্বপূর্ণ দিক হবে, এটিকে কীভাবে একটি স্ট্রিং হিসেবে রিপ্রেজেন্ট করা হয়।
অন্য প্রোগ্রামাররা, যারা Clock class থেকে তৈরি Clock objects ব্যবহার করেন বা কল করেন, তাঁরা ডিবাগ করা এবং অন্যান্য কাজের জন্য এই স্ট্রিং রিপ্রেজেন্টেশনের সাহায্য নেবেন।
তবে, একটি কাস্টম class-এর ডিফল্ট রিপ্রেজেন্টেশন খুব একটা সহায়ক নয়:
>>> Clock(12, 34)
<Clock object st 0x102807b20 >
আরও সহায়ক একটি রিপ্রেজেন্টেশন তৈরি করতে, আপনি class-এ একটি __repr__ স্পেশাল মেথড ডিফাইন করতে পারেন।
আদর্শভাবে, ওই __repr__ মেথডটি বৈধ Python কোড রিটার্ন করে, যা eval()-এ পাস করলে অবজেক্টটি আবার তৈরি করা যায়, ঠিক যেমনটি একটি __repr__ মেথডের স্পেসিফিকেশনে বলা হয়েছে।
বৈধ Python কোড রিটার্ন করলে অন্য ডেভেলপার সরাসরি কোডে বা REPL-এ str কপি-পেস্ট করতে পারেন।
11:30 AM বোঝানো একটি Clock দেখতে এমন হতে পারে:
`Clock(11, 30)`
সব কাস্টম ক্লাসে একটি __repr__ মেথড ডিফাইন করা ভালো অভ্যাস।
বিবেচনার জন্য আরও কিছু বিষয়:
< ...a practical description... >।__repr__ মেথডের পাশাপাশি, class-এর একটি বিকল্প "মানুষের পড়ার উপযোগী" স্ট্রিং রিপ্রেজেন্টেশনেরও প্রয়োজন হতে পারে।
এটি প্রোগ্রামের আউটপুট বা ডকুমেন্টেশনের জন্য অবজেক্টটি ফরম্যাট করতে ব্যবহার করা হতে পারে।
এটি করা হয় একটি __str__ স্পেশাল মেথড লিখে।
আবার datetime.datetime-এর দিকে তাকালে:
>>> str(datetime.datetime(2022, 5, 4))
'2022-05-04 00:00:00'
একটি datetime অবজেক্টকে যখন নিজেকে স্ট্রিং রিপ্রেজেন্টেশনে রূপান্তর করতে বলা হয়, তখন এটি ISO 8601 স্ট্যান্ডার্ড অনুযায়ী ফরম্যাট করা একটি str রিটার্ন করে, যা বেশিরভাগ datetime লাইব্রেরি সহজে পড়া যায় এমন তারিখ ও সময়ে পার্স করতে পারে।
এই অনুশীলনীতে আপনি আপনার Clock-এর জন্য একটি __str__ মেথড লেখার সুযোগ পাবেন, সেইসাথে একটি __repr__ মেথডও।
>>> str(Clock(11, 30))
'11:30'
এই স্ট্রিং রূপান্তরকে সমর্থন করতে, আপনাকে আপনার class-এ একটি __str__ স্পেশাল মেথড তৈরি করতে হবে, যা Clock-এর সময় দেখানো আরও "মানুষের পড়ার উপযোগী" একটি স্ট্রিং রিটার্ন করবে।
আপনি যদি একটি __str__ মেথড না তৈরি করেন এবং আপনার ক্লাসে str() কল করেন, তাহলে Python বিকল্প হিসেবে আপনার ক্লাসে __repr__ কল করার চেষ্টা করবে।
তাই এই দুটি স্পেশাল মেথডের মধ্যে যদি আপনি একটি কেবল ইমপ্লিমেন্ট করেন, তাহলে শুধু __str__ নয়, বরং __repr__ তৈরি করাই ভালো হবে।
Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।