我试图以基于类的格式表示日历。
目前,数据以下列形式的OrderedDict表示:
from collections import OrderedDict
dictionary = OrderedDict()
dictionary[date] = {'attr1': ... ,
'attr2': ... ,
... }
我希望实例化某种EnhancedDay
类来表示字典中的数据,并使用相应的EnhancedCalendar
类来保存{{1}的已排序容器(列表,OrderedDict?) }}秒。我正在看的功能:
EnhancedDay
个对象 已排序 ,如EnhancedDay
EnhancedCalendar.attr
的功能(即我希望将日期用作某种键'因此我可以通过某些内容检索EnhancedDay
类似于EnhancedDay
EnhancedCalendar.attr[date]
个实例的属性的方法,这些属性存储为EnhancedDay
实例的一部分,以便在我尝试 添加时< / strong> EnhancedCalendar
到EnhancedDay
,其中EnhancedCalendar.attr
个EnhancedDay
对象代表该日期,EnhancedCalendar.attr
对象将被合并,而#34 ;自动&#34; 我认为#1,我基本上理解答案:
EnhancedDay
装饰器(https://docs.python.org/2/library/functools.html#functools.total_ordering),指定@total_ordering
和其他比较运算符以使用__eq__
&#39; s EnhancedDay
attr,并且很好。date
发生合并或EnhancedCalendar.attr[date].custom_append(EnhancedDay)
不存在,创建attr[date]
再次,不确定最佳/最顺畅方式。我喜欢使用attr[date]
。另外:在+=
实例中存储EnhancedDay
个实例的最佳数据类型是什么?
或者,考虑到我想要完成的事情,我的一些想法可能只是......关闭。在这方面的任何帮助将不胜感激。
或者,这一切都可能比它的价值更麻烦,在这种情况下,我仍然对如何使用类理论上完成这些事情感兴趣。
答案 0 :(得分:1)
对于#2有几种方法可以做到这一点。一种方法可能是将日期转换为某种规范格式,然后将其用作字典中的字符串索引。
对于#3,请查看https://docs.python.org/3/library/collections.abc.html#collections.abc.Sequence
它确保您实现索引和+=
运算符所需的功能,以便按您希望的方式工作。特别是要+=
工作,您需要覆盖__iadd__()
函数。
要Calendar[date]
执行您想要的操作,您需要覆盖__getitem__()
和__setitem__()
函数 - 但是collections.DefaultDict几乎可以完成您想要的操作,因此我可能会想要基于EnhancedCalendar的基础。
我想我会使用list数据类型来存储日历中的日期,然后你会按第1天进行索引。