使用namedtuple进行多重继承

时间:2017-12-08 03:45:21

标签: python inheritance

我打算通过namedtuple构建一个嵌套数据结构,如下所示

from collections import namedtuple
BinaryDay = namedtuple('BinaryDay', ['AM', 'PM'])
QuaternaryDday = namedtuple('QuaternaryDday', ['Moring','Afternoon','Evening','Night'])
OctonaryDay = namedtuple('OctonaryDay', ['Sunrise', 'Sunshine', 'Hotnoon','Sunset', 'Goldenevening', 'Warmevening', 'Darknight', 'Refreshmorning'])
clock_day = OctonaryDay('07:00-10:00', '10:00-13:00', '13:00-16:00', '16:00-19:00', '19:00-22:00', '22:00-01:00','01:00-04:00', '04:00-07:00')

在控制台中运行以获得这样的输出:

In [71]: clock_day._asdict()
Out[71]:
OrderedDict([('Sunrise', '07:00-10:00'),
             ('Sunshine', '10:00-13:00'),
             ('Hotnoon', '13:00-16:00'),
             ('Sunset', '16:00-19:00'),
             ('Goldenevening', '19:00-22:00'),
             ('Warmevening', '22:00-01:00'),
             ('Darknight', '01:00-04:00'),
             ('Refreshmorning', '04:00-07:00')])

我想要的结果是这样的数据结构。

{'AM': {'Moring': {'Sunrise': '07:00-10:00',
                   'Sunshine': '10:00-13:00'}
        'Afternoon': {'Hotnoon': '13:00-16:00',
                      'Sunset': '16:00-19:00'},
        },
 'PM': {'Evening': {'Goldenevening': '19:00-22:00',
                    'Warmevening': '22:00-01:00'},
        'Night': {'Darknight': '01:00-04:00',
                  'Refreshmorning': '04:00-07:00'}}}

如何通过多重继承实现它?

1 个答案:

答案 0 :(得分:0)

这对namedtuple来说并不是一个很好的用例,也不是多重继承。

虽然有一个可能对你有用的库,所以pip install python-box然后是:

>>> data = {'AM': {'Moring': {'Sunrise': '07:00-10:00',
...                           'Sunshine': '10:00-13:00'},
...         'Afternoon': {'Hotnoon': '13:00-16:00',
...                       'Sunset': '16:00-19:00'},
...         },
...  'PM': {'Evening': {'Goldenevening': '19:00-22:00',
...                     'Warmevening': '22:00-01:00'},
...         'Night': {'Darknight': '01:00-04:00',
...                   'Refreshmorning': '04:00-07:00'}}}
... 
>>> from box import Box
>>> clock_day = Box(data)
>>> clock_day.AM.Afternoon
<Box: {'Hotnoon': '13:00-16:00', 'Sunset': '16:00-19:00'}>
>>> clock_day.AM.Afternoon.Sunset
'16:00-19:00'
相关问题