Организация объектов Python для поиска - PullRequest
0 голосов
/ 16 марта 2010

У меня есть класс Club и класс Player. Класс игрока имеет атрибут Fav.clubs, который будет иметь уникальные клубные значения. Таким образом, пользователь должен вводить различные названия клубов. Основываясь на названиях клубов, я должен найти эти клубные объекты и установить отношения, которые у этого конкретного игрока есть Fav.clubs.

Атрибут Fav.clubs в классе Player должен хранить имена Club. Теперь, что мне нужно сделать, это принять от пользователя информацию о Fav.clubs (список). После этого просмотрите каждый элемент списка и получите доступ к имени строки, чтобы найти соответствующий объект клуба, а затем сохраните этот экземпляр объекта в Player классе.

Ответы [ 2 ]

1 голос
/ 16 марта 2010

Храните все клубы в словаре под названием all_clubs. Ключом должно быть название клуба и значение самого объекта клуба. Затем вы можете сделать all_clubs[clubname], чтобы получить объект клуба с заданным именем.

У игрока может быть атрибут club_names, который представляет собой список уникальных имен, которые вы описали, и свойство clubs, которое может выглядеть следующим образом:

class Player(object):
    # ...

    @property
    def clubs(self):
        result = []
        for name in self.club_names:
            result.append(all_clubs.get(name))
        return result

В качестве альтернативы, было бы также неплохо использовать инструмент ORM, такой как sqlalchemy, и простую базу данных sqlite на основе файлов или в памяти. Тогда у вас есть мощь SQL и очень хорошее реляционное отображение. Но если вы новичок в Python, я бы не стал использовать что-то подобное, потому что sqlalchemy - довольно сложная тема, а в картировании используется некоторая магия Python в фоновом режиме, которую вы, возможно, не поняли в начале. Поэтому я бы предложил первый метод.

0 голосов
/ 16 марта 2010

Используйте dict для хранения карты между строками и экземплярами Club:

clubmap = {
  'basketball': Club("Basketball club"),
  'chess': Club("Chess club"),
}

someplayer.joinclub(clubmap['basketball'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...