2011-01-05 3 views
0

Я хочу использовать цикл while для инициализации объектов класса с помощью простого соглашения об увеличении именования. Цель состоит в том, чтобы иметь возможность масштабировать количество объектов класса по своему желанию и автоматически генерировать имена программ. (например, h1 ... h100 ... h1000 ...) Каждый h1, h2, h3 ... является его собственным экземпляром.Python 3.0 - Именование имен динамического класса

Вот моя первая попытка ... не удалось найти хороший пример.

class Korker(object): 

    def __init__(self,ident,roo): 
      self.ident = ident 
      self.roo = roo 


b = 1 
hwinit = 'h' 
hwstart = 0 

while b <= 10: 
    showit = 'h' + str(b) 
    print(showit) #showit seems to generate just fine as demonstrated by print 
    str(showit) == Korker("test",2) #this is the line that fails 

    b += 1 

Ошибки, которые я получаю диапазон от ошибки строки а не может использовать тип ошибки функция .... Любая помощь будет принята с благодарностью.

+2

«str (showit) == Korker (« test », 2) # Это строка, которая не работает« Во-первых, это действительно «==» в вашем коде? Во-вторых, отправьте фактическое сообщение об ошибке, которое вы действительно получаете. В-третьих, почему вы не используете словарь для такого рода вещей? –

+1

Вы в основном пытаетесь назвать переменные кодом? Короткий ответ, вы не можете. –

+1

Возможно, вы захотите сохранить свои объекты в списке или словаре. Похоже, что для этой цели не нужно злоупотреблять пространством имен переменных. –

ответ

3

Если вы хотите создать несколько объектов, то почему бы не просто поместить их в массив/хэш, где они могут быть рассмотрены позже на:

objects = {} 
for b in range(1,11): 
    objects['h'+str(b)] = Korker("test", 2) 

# then access like this: 
objects['h3'] 

Конечно, есть способы, чтобы сделать имена доступны локально, но это не очень хорошая идея, если вы не знаете, зачем вам это нужно (через globals() и locals()).

1

Немного другое решение для viraptor's: используйте список.

h = [] 
for i in range(10): 
    h.append(Korker("test",2)) 

В самом деле, вы даже можете сделать это на одной линии со списком понимания:

h = [Korker("test", 2) for i in range(10)] 

Тогда вы можете получить на них h[0], h[1] и т.д.

2

Переменные имена, укажите объекты, которые хранят данные. Вы пытаетесь вставить данные в имена переменных. Это не так.

вместо h1 - h1000, просто вызовите переменную h и сделайте ее списком. Затем вы получите h [0] до h [999].

Смежные вопросы