所以对于你们大多数人来说,这可能是一件非常简单的事情,但是我才刚开始。
以下是我第一次上课:
class WeatherYear:
DEFAULT_MAX = -99
DEFAULT_MIN = 999
DEFAULT_STR = 'DATE'
def __init__(self, year):
self.year = year
self.max_temp = WeatherYear.DEFAULT_MAX
self.min_temp = WeatherYear.DEFAULT_MIN
self.max_temp_date = WeatherYear.DEFAULT_STR
self.max_humid = WeatherYear.DEFAULT_MAX
self.min_humid = WeatherYear.DEFAULT_MIN
def add_day(self, date, max_temp, min_temp, max_humid, min_humid):
if max_temp and max_temp > self.max_temp:
self.max_temp = max_temp
self.max_temp_date = date
if min_temp and min_temp < self.min_temp:
self.min_temp = min_temp
if max_humid and max_humid > self.max_humid:
self.max_humid = max_humid
if min_humid and min_humid < self.min_humid:
self.min_humid = min_humid
这是我用于其中的一些东西:
years_dict = {}
wy_obj = years_dict.get(year)
if not wy_obj:
years_dict[year] = WeatherYear(year)
wy_obj = years_dict[year]
wy_obj.add_day(date, max_temp, min_temp, max_humid, min_humid)
这是我代码的一部分,有人可以向我解释确切发生了什么,还是主要部分,我是否需要在__init__
函数中保留年份?如果我删除了该怎么办?仍然会以相同的方式工作吗?
答案 0 :(得分:0)
您应该尝试一下代码,这是理解Python中OOP概念的最佳方法。
回到您的问题,根据您的代码,您需要在 init 函数中添加 year ,否则self.year = year
会给出未定义 year的错误
答案 1 :(得分:0)
问题> :我是否需要在 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()
使用Python测试:3.4.2