Реализация приложения — принтер погоды
Итак, файл weather_formatter.py
:
from weather_api_service import Weather
def format_weather(weather: Weather) -> str:
"""Formats weather data in string"""
return (f"{weather.city}, температура {weather.temperature}°C, "
f"{weather.weather_type}\n"
f"Восход: {weather.sunrise.strftime('%H:%M')}\n"
f"Закат: {weather.sunset.strftime('%H:%M')}\n")
if __name__ == "__main__":
from datetime import datetime
from weather_api_service import WeatherType
print(format_weather(Weather(
temperature=25,
weather_type=WeatherType.CLEAR,
sunrise=datetime.fromisoformat("2022-05-03 04:00:00"),
sunset=datetime.fromisoformat("2022-05-03 20:25:00"),
city="Moscow"
)))
Обратите внимание на печать типа погоды — weather.weather_type
. Так можно, потому что мы отнаследовали WeatherType
от str
и Enum
, а не только от Enum
. Если бы мы отнаследовали WeatherType
только от Enum
, то для получения строкового значения нужно было бы напрямую обратиться к атрибуту value
, вот так: weather.weather_type.value
.
При необходимости выводить на печать значения как-то иначе, всегда можно это реализовать в одном месте приложения. Как всегда обратите внимание, здесь реализован блок if __name__ == "__main__":
, который позволяет тестировать код при непосредственно прямом вызове этого файла python3.10 weather_formatter.py
. При импорте функции format_weather
код в этом блоке выполнен не будет.