Вопрос> : Нужно ли мне сохранять год в моей функции init ?
Нет , поскольку вы сохраняете дату в self.max_temp_date
, это удваивается, поскольку вы можете получить year
от даты, используя self.max_temp_date.year
.
Измените class WetherYear().__init__(...
на следующее:
def __init__(self, measure):
self.max_temp_date, self.max_temp, self.min_temp, self.max_humid, self.min_humid = measure
Таким образом, вам не нужно инициализировать атрибуты класса фиктивными значениями.Установите атрибуты сразу с первыми значениями measure
.
Что касается вашего имени class methodes
, назовите его , что делает эта функция.В этом случае вы не добавляете ничего, что обновляете class attributs
по условию.
def add_day(self, date, max_temp, min_temp, max_humid, min_humid):
if max_temp and max_temp > self.max_temp:
...
Вам не нужно get(...
WeatherYear
объект, чтобы проверить, существует ли этот year
.используйте только ключ year
.Также вам не нужно получать его снова wy_obj = years_dict[year]
, вы можете использовать его из dict
например years_dict[year].add_day(...
wy_obj = years_dict.get(year)
if not wy_obj:
years_dict[year] = WeatherYear(year)
wy_obj = years_dict[year]
wy_obj.add_day(...
Рассмотрите этот пример:
from datetime import date
class WeatherYear:
def __init__(self, measure):
self.max_temp_date, self.max_temp, self.min_temp, self.max_humid, self.min_humid = measure
def update(self, measure):
if measure[1] > self.max_temp:
self.max_temp_date = measure[0]
self.max_temp = measure[1]
if measure[2] > self.min_temp:
self.min_temp = measure[2]
if measure[3] > self.max_humid:
self.max_humid = measure[3]
if measure[4] > self.min_humid:
self.min_humid = measure[4]
def __str__(self):
return "WeatherYear:In {year} at {self.max_temp_date}, measured a max temperature of {self.max_temp}°C and max humid of {self.max_humid} %".format(self=self, year=self.max_temp_date.year)
def main():
# date, max_temp, min_temp, max_humid, min_humid
measurements = [(date(2018, 9, 10), 20, 8, 40, 30),
(date(2018, 9, 12), 25, 12, 50, 35),
(date(2018, 9, 13), 19, 10, 30, 25)]
max_years = {}
for measure in measurements:
if not measure[0].year in max_years:
max_years[measure[0].year] = WeatherYear(measure)
else:
max_years[measure[0].year].update(measure)
for year in max_years:
print("{}: {}".format(year, max_years[year]))
if __name__ == "__main__":
main()
Выход :
2018: WeatherYear:In 2018 at 2018-09-12, measured a max temperature of 25°C, max humid of 50 %
Проверено на Python: 3.4.2