类的Python数据结构因年份而异

类的Python数据结构因年份而异,python,python-3.x,Python,Python 3.x,我有一门课是这样的 class person: def __init__(self, name): self.name = name self.carData = "" self.HouseData = "" #other assets for someone in person: someone.carData = runCarQuery() someone.HouseData =

我有一门课是这样的

class person:
    def __init__(self, name):
        self.name = name
        self.carData = ""        
        self.HouseData = ""
        #other assets 
for someone in person:
     someone.carData = runCarQuery()
     someone.HouseData = runHouseQuery()
     #load other assets
我正在加载这样的数据

class person:
    def __init__(self, name):
        self.name = name
        self.carData = ""        
        self.HouseData = ""
        #other assets 
for someone in person:
     someone.carData = runCarQuery()
     someone.HouseData = runHouseQuery()
     #load other assets

但数据每年都会有所不同,例如2019年、2020年等,我正在努力想象一种在数据结构中表示这一点的适当方式。我知道理论上我可以这么做

class person:
    def __init__(self, name):
        self.name = name
        self.carData2019 = ""        
        self.HouseData2019 = ""
        self.carData2020 = ""        
        self.HouseData2020 = ""
        #other assets 
但它感觉非常笨拙,所以我希望有一种方法可以指向2019年版本的carData对象。例如,支持以下内容的数据模型

for someone in person:
     someone.carData['2019'] = runCarQuery('2019')
     someone.carData['2020'] = runCarQuery('2020')
     someone.HouseData['2019'] = runHouseQuery('2019')
     someone.HouseData['2020'] = runHouseQuery('2020')
     #load other assets
我知道这是无效的,但我对如何用python实现该场景有点迷茫

你的意思是:

# __init__
…
someone.carData = {}
someone.HouseData = {}
然后:

for someone in person:
    for year in (2019, 2020):
        someone.carData[year] = runCarQuery(year)
        someone.HouseData[year] = runHouseQuery(year)
你的意思是:

# __init__
…
someone.carData = {}
someone.HouseData = {}
然后:

for someone in person:
    for year in (2019, 2020):
        someone.carData[year] = runCarQuery(year)
        someone.HouseData[year] = runHouseQuery(year)

您可以使用@property

您可以使用@property


您可以创建一个为您执行筛选的方法:

class Person:
  def __init__(self, name):
      self.name = name
      self.car_data = []
      self.house_data = []

   def car_by_year(self, year):
      return filter(lambda x: x['date'].year() == year, self.car_data)

   def house_by_year(self, year):
      return filter(lambda x: x['date'].year() == year, self.house_data)
您必须在
car\u data
house\u data
对象中获得一些数据结构,可能需要一个字典来存储年份或日期值

p = Person('John')
p.car_data.append({'date': date(2018, 01, 01), 'model': 'Ford'})

for car in p.car_by_year(2018):
    print(car)

您可以创建一个为您执行筛选的方法:

class Person:
  def __init__(self, name):
      self.name = name
      self.car_data = []
      self.house_data = []

   def car_by_year(self, year):
      return filter(lambda x: x['date'].year() == year, self.car_data)

   def house_by_year(self, year):
      return filter(lambda x: x['date'].year() == year, self.house_data)
您必须在
car\u data
house\u data
对象中获得一些数据结构,可能需要一个字典来存储年份或日期值

p = Person('John')
p.car_data.append({'date': date(2018, 01, 01), 'model': 'Ford'})

for car in p.car_by_year(2018):
    print(car)

将其存储在字典中,其中键表示年份,值表示该年份的数据。“但数据因年份而异,例如2019年、2020年等”,这意味着什么?如何变化?将其存储在字典中,其中键是年份,值是该年份的数据。“但数据因年份而异,例如2019年、2020年等”,这意味着什么?如何变化?