У меня есть функция, которая создает случайное число экземпляров объектов. Ради демонстрации общей идеи мы собираемся притвориться, что это алгоритм для создания серии нелепоподобных комнат.Создание имен экземпляров из списка (Python)
Требования таковы, что я не буду знать, сколько экземпляров будет заблаговременно; они генерируются случайным образом и на лету.
Вкратце: я полностью осознаю, что следующий код нефункциональный, но он должен (надеюсь,!) Продемонстрировать мои цели.
import random
class Levelbuild(object):
def __init__(self):
self.l1 = dict({0:'a',1:'b',2:'c',3:'d',4:'e',5:'f',6:'g',7:'h',8:'i'})
# Pick a random number between 4 and 9.
for i in range(random.randint(4,9)):
self.l1[i] = Roombuilder()
Если мы предположим, что выбранное случайное целое число равно 5, идеальным результатом будет 5 экземпляров Roombuilder(); обозначены a, b, c, d и e соответственно.
Есть ли простой способ сделать это? Есть ли способ сделать этот период?
--Edit--
Гигантский «спасибо» Ник Оделл его ответа. Это не полная копия/вставка - но это вариант, который работает для того, что мне нужно;
import random
class Room(object):
def __init__(self):
self.size = (5,5)
class Level(object):
def __init__(self):
roomnames = ['a','b','c','d','e','f','g','h','i']
self.rooms = {}
for i in range(random.randint(4, 9)):
self.rooms[roomnames[i]] = Room()
Вместо того, чтобы строить каждый "номер" от руки, я теперь могу ...
test = Level()
print test.rooms['a'].size
>>> (5,5)
В чем проблема? Создание букв, чтобы идти с цифрами? Назначение меток классу? Я не совсем уверен, что у вас здесь проблема. –
Итак, вы хотите, чтобы объекты уровня n были названы членами класса Levelbuild? Возможно, вам захочется пересмотреть свой дизайн, так как вы, вероятно, захотите, чтобы они были сохранены в виде более легко истребимого упорядоченного набора данных, например списка или заказанного dict, и сохранялись под сервером levelmanager или levelstore, а не под самим строителем. –
Для того, что стоит, самый простой способ сгенерировать имена будет делать с '' dict (перечислять (string.ascii_lowercase)) '' - предположив, что вы знали, что у вас всегда будет менее 26 элементов. (Что, по-видимому, все правильно, учитывая ваше текущее решение). –