Python类随y变化的数据结构

2024-04-25 13:10:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一节课。。。你知道吗

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实现这个场景有点迷茫。你知道吗


Tags: 数据nameselfforinitdefclassperson
3条回答

您可以使用@propertyhttps://docs.python.org/3/library/functions.html#property

class person:
    def __init__(self, name):
        self.name = name  
        self.HouseData = ""
        #other assets
    @property
    def carData(self):
        this_year = get_this_year()
        return  runCarQuery(this_year)

some_person = Person()

some_person.carData

你的意思是:

# __init__
…
someone.carData = {}
someone.HouseData = {}

然后:

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

什么?你知道吗

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

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_datahouse_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)

相关问题 更多 >