Készíts egy órát, amely dátum nélkül kezeli az időpontokat.
Perceket is hozzáadhatsz hozzá, és kivonhatsz belőle.
Két óra, amely ugyanazt az időpontot mutatja, egyenlő legyen egymással.
A feladat tesztjei azt várják, hogy az órádat egy Clock class-ban valósítsd meg.
Ha még nem ismered a Python osztályait, a classes és az osztályok (a Python dokumentációjából) jó kiindulópont lehet.
Amikor objektumokkal dolgozol és hibakeresed őket, fontos, hogy legyen egy jó reprezentációjuk.
Például, ha létrehozol egy új datetime.datetime objektumot a Python REPL környezetében, megnézheted a string-reprezentációját:
>>> from datetime import datetime
>>> new_date = datetime(2022, 5, 4)
>>> new_date
datetime.datetime(2022, 5, 4, 0, 0)
A Clock class-odnak egy olyan egyedi object-et kell létrehoznia, amely dátum nélkül kezeli az időpontokat.
Ennek a class-nak az egyik fontos jellemzője lesz, hogyan reprezentálódik string-ként.
Más programozók, akik a Clock class-ból létrehozott Clock objects-eket használják vagy hívják meg, ezt a string-reprezentációt fogják használni hibakereséshez és más tevékenységekhez.
Egy egyedi class alapértelmezett reprezentációja azonban nem túl hasznos:
>>> Clock(12, 34)
<Clock object st 0x102807b20 >
Hogy hasznosabb reprezentációt hozz létre, definiálhatsz egy __repr__ speciális metódust a class-on.
Ideális esetben a __repr__ metódus érvényes Python-kódot ad vissza, amellyel újra létrehozható az objektum, ha átadod az eval() függvénynek, ahogyan azt a __repr__ metódus specifikációja leírja.
Az érvényes Python-kód visszaadása lehetővé teszi, hogy egy másik fejlesztő közvetlenül a kódba vagy a REPL-be másolja a str-t.
Egy Clock, amely a délelőtti 11:30-at reprezentálja, így nézhet ki:
`Clock(11, 30)`
A __repr__ metódus definiálása minden egyedi osztály esetében jó gyakorlat.
Néhány további szempont:
< ...a practical description... >.A __repr__ metódus mellett szükség lehet a class egy alternatív, „ember által olvasható” string-reprezentációjára is.
Erre akkor lehet szükség, hogy az objektumot a program kimenetéhez vagy a dokumentációhoz formázd.
Ezt egy __str__ speciális metódus megírásával teheted meg.
Nézzük újra a datetime.datetime-et:
>>> str(datetime.datetime(2022, 5, 4))
'2022-05-04 00:00:00'
Amikor egy datetime objektumot arra kérsz, hogy alakítsa át magát string-reprezentációvá, egy str-t ad vissza a ISO 8601 szabvány szerint formázva, amelyet a legtöbb datetime-könyvtár ember által olvasható dátumként és időpontként tud értelmezni.
Ebben a feladatban lehetőséged lesz __str__ és __repr__ metódust is írni a Clockodhoz.
>>> str(Clock(11, 30))
'11:30'
A stringkonverzió támogatásához létre kell hoznod egy __str__ speciális metódust a class-odon, amely egy „ember által olvashatóbb” stringet ad vissza a Clock idejével.
Ha nem hozol létre __str__ metódust, és meghívod a str()-t az osztályodon, a Python tartalék megoldásként a __repr__-t próbálja meg meghívni az osztályodon.
Tehát ha csak az egyik speciális metódust valósítod meg a kettő közül, jobb, ha __repr__-t hozol létre, nem csak __str__-t.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.