Python - 为类的实例创建列表

时间:2017-01-16 21:09:33

标签: python list class instance

我正在创建一个非常简单的待办事项列表应用程序,并且我正在尝试为我的每个类实例创建一个列表。我希望有七个列表,每天一个,用于存储任务,但我无法理解它。我想要做的例子:

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很新,我只是这样尝试尝试提高我的理解,所以我不确定这是否可行/合理(我只看到有关创建的问题实例列表)。有人能帮忙吗?

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分: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属性初始化为空列表。编写类以获得强制和可选参数时很常见。

答案 2 :(得分: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))