【发布时间】:2017-12-04 12:34:34
【问题描述】:
最近在看pickle源码。
copy_reg 中的以下代码让我很困惑:
_HEAPTYPE = 1<<9
def _reduce_ex(self, proto):
assert proto < 2
for base in self.__class__.__mro__:
if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE:
break
else:
base = object # not really reachable
if base is object:
state = None
那么__flags__ 是干什么用的?
我发现它是在type对象中定义的:
type.__flags__ = 2148423147
我试图在官方文档中搜索它,但没有找到。
但有趣的是,当__class__ 是python 内部类型时,__class__.__flags__ & _HEAPTYPE 总是0。当__class__ 是python 内部类型的子类时,结果将是1。
谁能帮我解决这个难题?
【问题讨论】:
标签: python python-2.7 pickle cpython