2015-08-17 3 views
0

Я хочу сделать следующее вещь:переменной называние экземпляров в Python

f = SomeClass() 
something(f.name) = deepcopy(f) 

Так что, когда f.name == «ABC» У меня есть экземпляр SomeClass() под названием ABC.

Для чего это необходимо? Я хочу перебирать список, и каждый элемент списка должен быть экземпляром SomeClass(), но с определенным именем, которое генерируется во время инстанса.

+1

Что вы хотите сделать с этим конкретным именем? – Evert

+0

Одно место для «построения» такого имени было бы в методе '__str __ (self)'. – Evert

+0

Непонятно мне, если вы хотите установить атрибут 'name' экземпляра, или если вы хотите назвать переменную? –

ответ

0

Вам нужен словарь, в котором хранятся пары key: value, ключ может быть именем, а значение может быть экземпляром напрямую. Вам также нужно будет отметить, что keys в словарях уникальны, поэтому, если вы попытаетесь установить значение для ключа, который уже существует в словаре, он перезапишет предыдущее значение.

Пример -

>>> class CA: 
...  def __init__(self, name): 
...    self.name = name 
... 
>>> classdict = {} 
>>> classdict['abcd'] = CA('abcd') 
>>> classdict['bcde'] = CA('bcde') 
>>> classdict 
{'abcd': <__main__.CA object at 0x02265150>, 'bcde': <__main__.CA object at 0x02265250>} 
>>> for key in classdict: 
...  print(classdict[key].name) 
... 
abcd 
bcde 
+0

Вы можете просто сохранить экземпляры в списке; каждый элемент будет знать свой атрибут имени. – Evert

+0

Да, но вы не сможете получить доступ к элементу, используя атрибут 'name'. Хотя этого вопроса специально не задавали в вопросе, я предполагаю, что это требование, поскольку он хочет сделать что-то вроде: 'something (f.name) = '. –

+0

Я не думаю, что это требование в вопросе. Кажется, что OP хочет, чтобы каждый экземпляр имел отдельный атрибут имени. – Evert

-1

Вы можете сделать это путем изменения области видимости словарей, возвращаемые locals() или globals():

from copy import deepcopy 

class SomeClass: 
    def __init__(self, name): 
     self.name = name 

f = SomeClass('ABC') 

locals()[f.name] = deepcopy(f) 

print(ABC) 

я должен отметить, однако, что в большинстве случаев это плохая практика.