isoweek.Week是如何实现json编码的(python2)

isoweek.Week是如何实现json编码的(python2),python,json,Python,Json,如果我从中实例化一个“周”,如下所示: from isoweek import Week week = Week(2015,24) 然后,week是一个json可序列化的: >>>json.dumps(week) >>>'[2015, 25]' 周班是如何做到这一点的 (isoweek.Week继承自namedtuple,它不可json序列化。) 编辑:显然namedtuple是json可序列化的,但这给我留下了一个问题:它是如何做到这一点的 继承自na

如果我从中实例化一个“周”,如下所示:

from isoweek import Week
week = Week(2015,24)
然后,
week
是一个json可序列化的:

>>>json.dumps(week)
>>>'[2015, 25]'
周班是如何做到这一点的

(isoweek.Week继承自namedtuple,它不可json序列化。)


编辑:显然namedtuple是json可序列化的,但这给我留下了一个问题:它是如何做到这一点的

继承自namedtuple,它不可json序列化

我认为这是错误的,请参见:

from collections import namedtuple
import json

week = namedtuple("week", ['year', 'week'])
w = week(2015, 15)
print json.dumps(w)

[2015, 15]
namedtuple
工厂生成的类的实例是从
tuple
派生的,因此:


我自己也试过了,但是初始化命名的元组时出错了。我的错。那么
namedtuple
实际上是一个类工厂,而不是一个类?但是您的示例中的
week
已经是一个类的实例了,或者我在这里感到困惑了吗?值得查看collections.py中的源代码。首先要进行大量的验证和处理,但是
namedtuple()
的核心涉及一个模板字符串,该字符串的格式包含新类型的详细信息,即
exec
ed在命名空间中,动态创建tuple的一个新子类(作为
namedtuple()的返回值返回)
函数。在本例中,
week
是由
namedtuple()
fn创建的新类。
isinstance(w, tuple)
True