2017-01-16 1 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 매우 새로운 오전 난 그냥이 분별 /도 가능한 경우 (잘 모르겠어요 그래서 내 이해를 시도 I를 시도하는이 일을 해요 : 내가 뭘하려고 오전의 예 인스턴스 목록 만들기에 대한 질문 만 보았습니다.) 누구든지 도울 수 있니?

+0

실행중인 특정 오류가 있습니까? 또한, 두 번째 인수 (목록)를 괄호로 묶을 필요가 없습니다. – denvaar

+3

@leaf : 아니요, 그는 아니에요. '(MonList = [],)'는'튜플 (tuple) '이 될 것입니다. 여기에 괄호는 쓸모가 없습니다. –

+0

후행 쉼표는 하나의 항목 만있는 튜플을 나타냅니다. – 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_Wedtodo_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)) 
관련 문제