簡體   English   中英

Python-為類實例創建列表

[英]Python - Create lists for instances of class

我正在制作一個非常簡單的待辦事項列表應用程序,並嘗試為我的課程的每個實例創建一個列表。 我當時希望有七個列表,每天一個,該列表將用於存儲任務,但是我無法解決。 我嘗試做的例子:

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的新手,我只是想嘗試嘗試以加深我的理解,所以我不確定這是否可能/明智(我只見過有關創建實例列表的問題)。 有人能幫忙嗎?

初始化程序可能需要一個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']

這樣的事情怎么樣?

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屬性初始化為空列表的對象。 編寫類時,通常具有強制性和可選參數。

您可以將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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM