2012-07-06 6 views
10

Я просто учась программировать и изучать Python в качестве своего первого языка. В качестве упражнения я пытаюсь написать программу адресной книги. Новый контакт создается пользователем с помощью командной строки. Новые контакты - это экземпляры объектов класса «Контакты».Создание динамически названных переменных из пользовательского ввода

Я знаю, как создать экземпляр объекта класса изнутри кода, но как его создать с именем переменной на основе ввода пользователем? Скажем, я запрашиваю у пользователя имя - как я могу взять эту информацию и использовать ее для имени переменной моего нового объекта?

Спасибо!

+0

Мы рады помочь, но вы действительно должны опубликовать код (то, что вы пробовали), так что мы можем направлять вам лучше – inspectorG4dget

ответ

19

Из комментариев выясняется, что вы спрашиваете о чем-то, что задается здесь более одного раза. «Как создать динамически именованные переменные».

Не делайте этого. Скорее всего, есть лучшие способы решения проблемы.

Объяснение:

Если вы должны были создать динамически имена переменных, вы не достаточно иметь хорошую ручку для них, как только они будут созданы. Конечно, есть способы проверить глобальные и локальные области, чтобы увидеть, что там. Но дело в том, что вы должны иметь окончательный контроль над тем, что создается.

Что вы должны сделать, это поместить их в словарь:

people = {} 
name = raw_input("What name? ") # "person" 
people[name] = User(name) 

print people 
# {'person': <User: "person">} 

print people.keys() 
# ['person'] 

Таким образом, вы не создавая произвольные переменные в пространстве имен. Теперь у вас есть словарь ключей и объектов в качестве значений. Это также может червей, позволяющих вводить пользовательский ввод для управления именованием переменной.

Для получения дополнительной информации, просто найдите здесь одну и ту же тему и посмотрите многочисленные примеры того, почему вы не должны этого делать. Независимо от того, какие примеры вы видите, как использовать глобальные переменные() и т. Д., Пожалуйста, примите мои рекомендации и не отправляйтесь по этому маршруту. Любите и наслаждайтесь ... и можете обнять и поцеловать, ваш словарь.

Ссылки:

+0

Спасибо за помощь! Может быть, я не был достаточно точен с моим вопросом. Я знаю, как назначать значения полям объекта на основе пользовательского ввода, но как насчет фактического имени объекта? – ShaunSoda

+0

Да, вам нужно быть намного более подробным, когда вы просите о помощи здесь. Вы говорите о представлении экземпляра при печати объекта? Что вы подразумеваете под «именем» объекта? – jdi

+0

Хе-хе. Извините, как я уже сказал, я просто учусь программировать так, чтобы медведь со мной на условиях. Когда вы создаете новый объект класса, вы даете ему имя. Мой класс называется «Контакты», поэтому, если бы я должен был создавать новые объекты, они могли бы называться contact1, contact2 и т. Д. Может быть, они называются идентификаторами? Я хочу назвать идентификатор каждого объекта независимо от ввода пользователем. – ShaunSoda

0

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

Можно, однако, с помощью SetAttr встроенной команды:

setattr(someobject, name, user) 

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

class User(object): 

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


users = {} 

name = raw_input("What name?") 
users[name] = User(name) 


print users 
print users['Andre'].name 

Пример:

What name?Andre 
{'Andre': <__main__.User object at 0x7f6b418a8710>} 
Andre 
+0

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

+0

barf. также важно то, что другие узнают от спотыкания по этому вопросу. –

+0

Большое вам спасибо! Имеет смысл! – ShaunSoda

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