2011-01-01 11 views
6

これはOOPについての非常に基本的な質問です(私はPythonを使用していますが、実際には概念的な問題であり、実際の言語特有ではありません)。私は周りを見回しましたが、チュートリアルや本はこの特定の質問をカバーしていません。私が不明であれば、私は謝罪し、私が書いたことを明確にすることができれば幸いです。OOPと永続性についての初心者の概念的な質問

私がpickleを使ってディスクに書きたい単純なアドレス帳を作成しているとします。私はContactと呼ばれるクラスを持っています。__init__はいくつかの引数(firstNameとlastName)をとります。連絡先を作成したり編集したりできるメニューがあります。OOPのすべての例について、私は彼らが何かをするのを見ました...

bob = Contact('Bob', 'Smith') 
jane = Contact('Jane', 'Smith') 

...連絡先の新しいインスタンスを作成します。しかし、これらはすべて実行時に定義されています。これらのインスタンスをすべてユーザー入力でオンザフライで作成したい場合はどうなりますか?各自のために新しいインスタンスを作成しますか?ユーザーの入力からどのようにすればいいですか?次に、すべてのインスタンスをリストに書き込み、それをピクルスしますか?それとも...何かのように行うのですか

firstName, lastName = raw_input("Enter first name: "), raw_input("Enter last name: ")  
contact = Contact(firstName, lastName) 

...そしてちょうどリストに連絡先を追加し、接触例えば、私は、ユーザーを追加するたびに、新しい値を取得しますか?これは、私が本当にどこにも説明していないので、実際には得られない重要な概念です。私が見たすべての例は、上記のことを行うのではなく、それぞれの事柄/人物の新しいインスタンスを作成しますが、それらはすべて事前定義されています。私はこの概念を私に説明することに本当に感謝しています。

答えて

1

はい、これは一般的にどのように行うのですか?オブジェクトの配列を作成します。あなたの言語やフレームワークによっては、他の種類のコレクションもあります。新しいオブジェクトを作成するときは、まずそれを一時変数に作成し、それをコレクションに挿入します。

多くの場合、オブジェクト(DBやファイルなど)からオブジェクトを一度にロードすることはありません。作業する必要のあるものだけをロードします。 1つだけをロードすると、特別な変数が得られる可能性があります。いくつかは再びコレクションを取得します。

+0

入力されたデータをインスタンスの名前にする必要はありますか?それとも完全に不必要なのでしょうか?または可能ですか?あなたの名前は何ですか? firstName = raw_input( "あなたの名前は何ですか?") lastName = raw_input( "あなたの姓は何ですか?") eval(firstName)= Contact firstName、lastName) – johnharris85

+1

@Jハリス - 言語によります。 PHPとJavascriptでこれを行うことができます。 C++/C#はできませんでした。しかし、私はこれが正しい考え方だとは思わない。あなたが名前で連絡先を見たい場合は、コレクションの "辞書"(いくつかの言語では "マップ")タイプを使用してください。このように各連絡先の変数で名前空間を汚染することは無駄であり、非常に危険です(あなたの変数のようにファーストネームの連絡先を作成するとどうなりますか?) –

3

あなたの例はまさにその動作です。