2012-07-06 11 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'] 

あなたの名前空間内の任意の変数を作成していないこの方法です。これで、値としてキーとオブジェクトの辞書が作成されました。また、変数の命名を駆動するためにユーザーが入力できるようにすることもできます。

詳細については、ここで同じトピックを検索し、これを行うべきではない理由の数多くの例をご覧ください。あなたがどのようにglobals()などを使用するかを示すどのような例に関係なく、私のアドバイスを取ってそのルートには行かないでください。愛し、お楽しみください。そしておそらくあなたの辞書を抱きしめてキスしてください。

参考文献:

+0

感謝を導くことができるようにあなたが本当に(あなたが試したものを)いくつかのコードを投稿する必要があります!たぶん私は私の質問で十分に正確ではなかった。私は、ユーザーの入力に基づいてオブジェクトのフィールドに値を割り当てる方法を知っていますが、オブジェクトの実際の名前はどうですか? – ShaunSoda

+0

はい、あなたはここで助けを求めるときにはるかに詳細にする必要があります。オブジェクトを印刷するときのインスタンスの表現について話していますか?オブジェクトの「名前」はどういう意味ですか? – jdi

+0

Hehe。申し訳ありませんが、私が言ったように、私はちょうどプログラムを学ぶことで、私はその条件に耐えます。新しいクラスオブジェクトを作成するときには、名前を付けます。私のクラスは連絡先と呼ばれているので、新しいオブジェクトを作成すると、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

関連する問題