Óra

Óra

Könnyű

Utasítások

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.

Így valósul meg ez a feladat a Python kurzuson

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.

Az osztályod reprezentálása

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 metódus által visszaadott információnak hasznosnak kell lennie a hibák keresésekor.
  • Ideális esetben a metódus olyan stringet ad vissza, amely érvényes Python-kód, bár ez nem mindig lehetséges.
  • Ha az érvényes Python-kód nem kivitelezhető, a szokás az, hogy csúcsos zárójelek között adj vissza egy leírást: < ...a practical description... >.

Stringkonverzió

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.


Forrás

Páros programozási foglalkozás Erin Drummonddal
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Python Exercism

Készen állsz elkezdeni a(z) Óra feladatot?

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.