Python - 为 class 的实例创建列表
Python - Create lists for instances of class
我正在制作一个非常简单的待办事项列表应用程序,我正在尝试为我的 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 的新手,我这样做只是为了尝试提高我的理解,所以我不确定这是否 possible/sensible(我只看到有关创建列表的问题实例)。有人能帮忙吗?
您的初始化程序可以需要一个 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')
构造函数接受两个参数 name
和 todo_list
。请注意 todo_list
的默认值为空列表。所以创建这个对象的唯一强制参数是 name
- day_Wed
是一个对象,其中 todo_list
属性被初始化为一个空列表。写 类 时通常会有强制和可选参数。
您可以将 7 天存储在列表或字典中,但在 OOP 中通常定义一个提供有用访问器的容器 class。这是一个让您可以通过 case-insensitive 名称或数字(假设星期日为 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))
我正在制作一个非常简单的待办事项列表应用程序,我正在尝试为我的 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 的新手,我这样做只是为了尝试提高我的理解,所以我不确定这是否 possible/sensible(我只看到有关创建列表的问题实例)。有人能帮忙吗?
您的初始化程序可以需要一个 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')
构造函数接受两个参数 name
和 todo_list
。请注意 todo_list
的默认值为空列表。所以创建这个对象的唯一强制参数是 name
- day_Wed
是一个对象,其中 todo_list
属性被初始化为一个空列表。写 类 时通常会有强制和可选参数。
您可以将 7 天存储在列表或字典中,但在 OOP 中通常定义一个提供有用访问器的容器 class。这是一个让您可以通过 case-insensitive 名称或数字(假设星期日为 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))