Форум сайта python.su
Добрый вечер!
Встретился с проблемой создания множества объектов класса в программе не вручную, а автоматически. Т.е., нужно, найти способ создать объект, обращаться к нему и т.д. по его сгенерированному в программе имени (типа string, как иначе - не знаю). Наверное, непонятно объясняю, но хотелось бы что-то вроде этого:
class abc:
pass
for i in xrange(10):
namestr='name'+str(i)
name=abracadabra(namestr) #волшебная функция, получающая строку и отдающая само название нового объекта, чтобы с ним можно было работать
name=abc()
name.attr=20
del name
# и т.п.
...
for i in xrange(10):
name='name'+str(i)
abc.__createnewobject__(name)
...
Офлайн
Что именно вы хотите сделать не очень понятно. Во многих случаях помогает способность питона выполнять строки функциями eval, exec. можно и объекты массово создать.
Может вас устроит создать dict тогда к объектам несколько сложнее обращаться но хитростей меньше
v=dict([["nm%s"%i,Ta()] for i in xrange(1000)])
el=v["nm2"]
Отредактировано (Апрель 30, 2011 20:33:09)
Офлайн
doza_andДа, спасибо, то что надо! Про словари уже нашел, а вот про eval раньше не знал.
Что именно вы хотите сделать не очень понятно. Во многих случаях помогает способность питона выполнять строки функциями eval, exec. можно и объекты массово создать.
Может вас устроит создать dict тогда к объектам несколько сложнее обращаться но хитростей меньшеv=dict([["nm%s"%i,Ta()] for i in xrange(1000)])
el=v["nm2"]
...
class stack: #сам стек
head=0 #указатель на объект-вершину стека
count=0 #размер
... #тут функции добавления в стек, удаления из него, и т.д.
class object:
def __init__(self,data,next):
self.data=data #собственно, данные
self.next=next #указатель на следующий элемент
...
Отредактировано (Апрель 30, 2011 21:37:05)
Офлайн
class Tli:
def __init__(self,prev,val):
self.prev=prev
self.data=val
class Tstk:
def __init__(self):
self.head=None
def push(self,el)
self.head=Tli(self.head,el)
def top(self,el)
return self.head.data
def pop(self)
if self.head:
self.head=self.head.prev
Офлайн
doza_andCпасибо еще раз, то что нужно. Получилось!Тут надо еще подрихтовать, но вроде все получается и без генерации именclass Tli:
def __init__(self,prev,val):
self.prev=prev
self.data=val
class Tstk:
def __init__(self):
self.head=None
def push(self,el):
self.head=Tli(self.head,el)
def top(self,el):
return self.head.data
def pop(self):
if self.head:
self.head=self.head.prev
Отредактировано (Апрель 30, 2011 22:46:30)
Офлайн