Как назначить имена автоматически созданным объектам класса (python) - PullRequest
1 голос
/ 13 октября 2011

Допустим, у меня есть класс под названием «Карта». Карта построена с аргументом "страна". При создании экземпляра Map следует создать номер объекта класса «Город», основываясь на списке названий городов для страны. Но как назвать «городские» объекты?

псевдокод:

class Map(object):
    def __init__(self, country):
        for i in range(len(citynames)):
            cityname_i = City(i)

На словах: Допустим, у меня есть список названий городов: ["Бостон", "Чикаго", "Денвер] Когда я тогда делаю что-то вроде

us_map = Map(america)

Я бы хотел, чтобы Map создал три экземпляра класса City (определенные в другом месте) с именами "Boston", "Chigago" и "Denver".

Я новичок в этом, так что, возможно, я перепутал свой глоссарий ООП глоссарий. Если так, пожалуйста, поправьте меня.

EDIT: Кажется, мой пример вызвал некоторую путаницу. На мой взгляд, вопрос не в словарях. Я просто использовал это в качестве примера.

Я создаю игру, где люди могут загружать любое количество сценариев. Я не знаю, сколько сценариев они загружают. Но все сценарии в основном работают одинаково, с несколькими методами. Поэтому, когда я создаю «Game = Game (folder)», мой класс должен создать экземпляр класса Scenario для каждого загруженного файла сценария. Затем третий класс «Двигатель» проигрывает все сценарии ...

Но как мне автоматически присваивать имена экземплярам "Сценария"?

На данный момент я использую «глоб», чтобы найти файлы сценариев в соответствующей папке. Так что у меня они есть в списке за пределами класса.

UPDATE:

Кажется, либо я не разъяснил свой вопрос (могу ли я создавать экземпляры автоматически на лету), либо что хорошие люди скорее укажут мне правильное направление, чем ответят на мой глупый вопрос. В любом случае - я думаю, что словарь это путь. Итак, сейчас я закрываю этот вопрос (первым ответил rplnt) и присваиваю правильный ответ первому постеру. Спасибо за помощь.

Ответы [ 3 ]

4 голосов
/ 13 октября 2011

Опять же, как и в моем предыдущем ответе, я бы поместил объекты в словарь .Преимущество перед их созданием в пространстве имен заключается в том, что их будет проще поддерживать.Т.е., если бы вы создали их, как вы сказали, вам все равно нужно было бы узнать о них, вероятно, запоминая их ссылку, хранящуюся в списке (или, возможно, словаре?)Если вы хотите использовать список имен, тогда ваш код будет полон try операторов.

1 голос
/ 13 октября 2011

По сути, это звучит так, как будто вам нужно создать экземпляр некоторого класса контейнера и сохранить его в атрибуте ваших экземпляров класса Map (то есть self.cities).

В идеале тип этого контейнера должен соответствовать тому, как будет использоваться и / или манипулироваться набор городов в Map.Например, будут ли участники добавляться, удаляться или часто меняться?Будут ли они часто повторяться, и нужно ли их хранить в определенном порядке или переупорядочивать по требованию?

В зависимости от ваших ответов на подобные вопросы, Python предлагает несколько встроенных высокопроизводительных типов данных,такие как списки, словари и наборы, которые могут быть подходящими.Это также позволяет вам создавать свои собственные классы контейнеров, когда это необходимо.

0 голосов
/ 13 октября 2011

Я бы сделал что-то вроде этого:

class Map(object):

  CITIES = { "america": ["Boston", "Chicago", "Denver"], "germany": ["Munich" , ...], ...}

  def __init__(self, country):
      self.cities = []
      for city_name in Map.CITIES[country].values():
          self.cities.append(City(city_name))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...