如何根据属性值返回排序类对象的列表

问题描述 投票:2回答:1

我创建了一个名为Game类。类的对象具有以下属性:

  • 那么
  • 类型
  • 发布日期

这是类:

class Game:


    num_of_objects = 0

    def __init__(self, name, genre, year=1990, month=1, day=1):
        """
        Class Constructure: Returns a Game object whose parameters are:
        name: String
        genre: String
        data: YYYY-MM-DD
        """   
        self.name = name
        self.genre = genre
        self.year = year
        self.month = month
        self.day = day
        self.release_date = self.year + '-' + self.month + '-' + self.day
        Game.num_of_objects += 1 

    def __repr__(self):
        return str(self)

    def games_by_year():
          print [Game.genre for Game in x]

    def games_by_genre():
        pass

    def games_starting_with():
        pass

我想创建一个类的方法,即按流派返回游戏列表,返回按年度游戏列表的另一种方法。在这种情况下的游戏只是类对象:

Halo = Game('Halo', 'shooter', '2019', '11', '12')

此外,有没有更好的方式来处理日期?我想是在格式YYYY-MM-DD

python class oop
1个回答
1
投票

您需要在创建他们实际存储游戏的地方。类级列表会工作:

class Game:

    num_of_objects = 0
    games = []

    def __init__(self, name, genre, year=1990, month=1, day=1):
        ...
        self.games.append(self)

你也许可以删除num_of_objects计数器,因为这是从平凡中发现len(self.games)。 (和注释,因为你发生突变,而不是重新分配games对象,你可以通过直接self提到它。)

现在,您的实际方法需要被classmethods,其接受cls作为第一个参数:

@classmethod
def games_by_year(cls):
      return sorted(cls.games, key=lambda g: g.year)

@classmethod
def games_by_genre(cls):
      return sorted(cls.games, key=lambda g: g.genre)
© www.soinside.com 2019 - 2024. All rights reserved.