Reloj

Reloj

Fácil

Instrucciones

Implementa un reloj que maneje horas sin fechas.

Debes poder sumarle y restarle minutos.

Dos relojes que representen la misma hora deben ser iguales entre sí.

Cómo se implementa este ejercicio en el track de Python

Las pruebas de este ejercicio esperan que tu reloj se implemente en una class Clock. Si aún no conoces las clases en Python, classes y clases (de la documentación de Python) son buenos puntos de partida.

Cómo representar tu clase

Cuando trabajas con objetos y los depuras, es importante tener una buena representación de ese objeto. Por ejemplo, si crearas un nuevo objeto datetime.datetime en el entorno REPL de Python, podrías ver su representación en string:

>>> from datetime import datetime
>>> new_date = datetime(2022, 5, 4)
>>> new_date
datetime.datetime(2022, 5, 4, 0, 0)

Tu class Clock debe crear un object personalizado que maneje horas sin fechas. Un aspecto importante de esta class será cómo se representa como un string. Otros programadores que usen o llamen a los objects Clock creados a partir de la class Clock consultarán esta representación en string para depurar y para otras actividades. Sin embargo, la representación predeterminada de una class personalizada no es muy útil:

>>> Clock(12, 34)
<Clock object st 0x102807b20 >

Para crear una representación más útil, puedes definir un __repr__ como método especial en la class.

Idealmente, ese método __repr__ devuelve código Python válido que se puede usar para recrear el objeto cuando se pasa a eval(), como se describe en la especificación de un método __repr__. Devolver código Python válido permite que otro desarrollador copie y pegue el str directamente en el código o en el REPL. Un Clock que represente las 11:30 AM podría verse así:

 `Clock(11, 30)`

Definir un método __repr__ es una buena práctica para todas las clases personalizadas. Algunas cosas adicionales que conviene tener en cuenta:

  • La información que devuelve este método debe ser útil al depurar problemas.
  • Idealmente, el método devuelve un string que es código Python válido, aunque no siempre sea posible.
  • Si no es práctico devolver código Python válido, la convención es devolver una descripción entre paréntesis angulares: < ...a practical description... >.

Conversión a string

Además del método __repr__, también podría ser necesario tener una representación en string alternativa y «legible para humanos» de la class. Esto se puede usar para formatear el objeto para la salida de un programa o para la documentación. Esto se logra escribiendo un __str__ como método especial. Veamos de nuevo datetime.datetime:

>>> str(datetime.datetime(2022, 5, 4))
'2022-05-04 00:00:00'

Cuando se le pide a un objeto datetime que se convierta a una representación en string, devuelve un str formateado según el estándar ISO 8601, que la mayoría de las bibliotecas de fechas pueden interpretar como una fecha y hora legibles para humanos.

En este ejercicio tendrás la oportunidad de escribir un método __str__ para tu Clock, además de un método __repr__.

>>> str(Clock(11, 30))
'11:30'

Para admitir esta conversión a string, tendrás que crear un método especial __str__ en tu class que devuelva un string más «legible para humanos» que muestre la hora del Clock.

Si no creas un método __str__ y llamas a str() en tu clase, Python intentará llamar a __repr__ en tu clase como respaldo. Así que si solo implementas uno de estos dos métodos especiales, es mejor crear un __repr__ en lugar de solo un __str__.


Fuente

Sesión de programación en pareja con Erin Drummond
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Python Exercism

¿Todo listo para empezar Reloj?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.