2017-01-16 10 views
1

私は非常に簡単なリストアプリケーションを作っています。クラスのインスタンスごとにリストを作成しようとしています。私は毎日7つのリストを持っていると思っていましたが、これは仕事を保存するのに使われますが、私の頭の中で頭を上げることはできません。私がやろうとしています何の例:Python - クラスのインスタンスのリストを作成

class Day: 
    def __init__(self, name, todo_list): 
     self.name = name 
     self.todo_list = todo_list 

day_Mon = Day('Monday', (MonList=[])) 
day_Tue = Day('Tuesday', (TueList=[])) 
... 

私はOOPに非常に新しいですし、私はちょうど(私は、これは賢明な/ことも可能であるのかはわからないので、私の理解を改善しようと試みるためにこれをやっている私は、インスタンスのリストを作成することについての質問のみが表示されます)。誰でも手伝ってくれますか?

+0

実行中のエラーはありますか?また、2番目の引数(リスト)を括弧で囲む必要はありません。 – denvaar

+3

@leaf:いいえ、彼はいません。 '(MonList = []、)'は 'タプル 'になります。ここでかっこはちょうど役に立たない。 –

+0

末尾のカンマは、項目が1つしかない場合のタプルを示します。 – denvaar

答えて

1

どのようにこのような何か?

class Day: 
    def __init__(self, name, todo_list=None): 
     self.name = name 
     if todo_list: 
      self.todo_list = todo_list 
     else: 
      self.todo_list = [] 


day_Mon = Day('Monday', ['errands', 'study']) 
day_Tue = Day('Tuesday',['laundry', 'cook']) 
day_Wed = Day('Wednesday') 

コンストラクタは二つの引数nametodo_listを受け入れます。 todo_listには、空のリストの既定値が設定されています。したがって、このオブジェクトを作成する唯一の必須の引数はname-day_Wedです。オブジェクトはtodo_list属性が空のリストで初期化されています。必須およびオプションの引数を持つようにクラスを記述するのが一般的です。

+0

私はデフォルトの引数として変更可能なオブジェクトを使用しない*ため*あなたの答えを編集しました。説明は[here](https://pythonconquerstheuniverse.wordpress.com/2012/02/15/mutable-default-arguments/)を参照してください。 –

+0

@RolandSmithこれを指摘してくれてありがとう。編集されました。 – sujit

1

イニシャライザにはnameパラメータが必要な場合があり、省略可能なデフォルトの空白リストtodo_listを使用できます。

ここでは説明しませんが、ここでは取り上げません。空のリストを関数パラメータのデフォルト値として使用しないでください。Noneを使用して、__init__

>>> class Day: 
...  def __init__(self, name, todo_list=None): 
...   self.name = name 
...   self.todo_list = todo_list if todo_list else [] 

>>> day_Mon = Day('Monday') 
>>> day_Mon.todo_list 
[] 
>>> day_Tue = Day('Tuesday', ['wash clothes', 'pack']) 
>>> day_Tue.todo_list 
['wash clothes', 'pack'] 
+2

あなたは何をしているのかを言葉で説明できますか? –

+0

Peter - 更新しました。 – Scott

0

リストやディクショナリに7日間保存できますが、一般的なOOPでは、便利なアクセサを提供するコンテナクラスを定義することができます。大文字小文字を区別しない名前または数字(日曜日が0であると仮定)を指定して、曜日を指定することができます。

import datetime 

class Day: 
    def __init__(self, name, todo_list): 
     self.name = name 
     self.todo_list = todo_list 

class Week: 

    weekday_names = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 
     'Friday') 
    weekday_index = {name.lower():idx 
     for idx,name in enumerate(weekday_names)} 
    weekday_index.update({idx:idx for idx in range(7)}) 

    def __init__(self): 
     self.days = [Day(name, []) for name in self.weekday_names] 

    def __getitem__(self, name_or_ord): 
     if isinstance(name_or_ord, str): 
      name_or_ord = name_or_ord.lower() 
     return self.days[self.weekday_index[name_or_ord]] 

    def __setitem__(self, name, day): 
     raise ValueError("Cannot set days in week") 

week = Week() 
week['Sunday'].todo_list.append('dinner with parents') 
week['Monday'].todo_list.append('laundry') 
print("Monday's tasks:", 
    ', '.join(week['monday'].todo_list)) 
print("Today's tasks:", 
    ', '.join(week[datetime.date.today().weekday()].todo_list)) 
関連する問題