Как вернуть список объектов класса, отсортированных по значению атрибута - PullRequest
0 голосов
/ 03 февраля 2019

Я создаю класс с именем Game.Объекты класса имеют следующие атрибуты:

  • имя
  • жанр
  • release_date

Это класс:

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

Кроме того, есть ли лучший способ справиться с датой?Я бы хотел быть в формате ГГГГ-ММ-ДД

1 Ответ

0 голосов
/ 03 февраля 2019

Вам нужно хранить игры где-то при их создании.Список на уровне класса будет работать:

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

Теперь ваши фактические методы должны быть методами класса, которые принимают 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...