何时UUID变体会是整数?

4
UUID 模块的文档中写道:

UUID.variant

UUID 变体,决定了 UUID 的内部格式。这将是以下整数常量之一: RESERVED_NCSRFC_4122RESERVED_MICROSOFTRESERVED_FUTURE

稍后文档又写道:

uuid.RESERVED_NCS

为 NCS 兼容性保留。

uuid.RFC_4122

指定在RFC 4122中给出的 UUID 格式。

uuid.RESERVED_MICROSOFT

为 Microsoft 兼容性保留。

uuid.RESERVED_FUTURE

为将来定义保留。

鉴于此,我期望访问这些属性时会看到整数值。然而:

>>> import uuid
>>> u = uuid.uuid4()
>>> u.variant
'specified in RFC 4122'
>>> uuid.RESERVED_NCS
'reserved for NCS compatibility'
>>> uuid.RFC_4122
'specified in RFC 4122'
>>> uuid.RESERVED_MICROSOFT
'reserved for Microsoft compatibility'
>>> uuid.RESERVED_FUTURE
'reserved for future definition'

这在2.7.9和3.4.2版本中产生相同的结果,我没有找到任何版本的文档表明这些常量可能是字符串。
我能找到与此问题相关的最相关的搜索结果是该模块的源代码(在SVNGitHub上),其中包含了这个语句:
RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE = [
    'reserved for NCS compatibility', 'specified in RFC 4122',
    'reserved for Microsoft compatibility', 'reserved for future definition']

在解释器中看到的结果是合理的,但是对于文档来说我不能这么说。

这是一个简单的文档错误吗?还是有地方确实会将这些属性作为整数处理,就像文档所承诺的那样?这里到底发生了什么?


我猜测常量在过去的某个时候从整数更改为字符串,但没有更新文档。虽然今晚我的Mercurial技能还不足以确认这一点。 - chepner
1
@chepner - 从GitHub上看,2006年8月21日的提交有一个uuid.py,其中包含了与今天相同的变体字符串常量列表,而该存储库没有更早的记录。 - TigerhawkT3
2
看起来像是文档错误,在 Github 的 Python 2.5 分支中最初的出现显示它一直都是这样。您是否在追踪器上提交了错误报告以进行查看? - Dimitris Fasarakis Hilliard
@JimFasarakis-Hilliard - 此模块及其文档在2.5中发布,详见此跟踪问题。但是,附加文件未提及任何整数常量,这很奇怪,因为2.5文档与今天的文档完全相同。我想我会考虑在跟踪器上提交缺陷报告。 - TigerhawkT3
问题已经打开。 (http://bugs.python.org/issue29217) - TigerhawkT3
很高兴看到它被修复了(而且很快!)。 - Dimitris Fasarakis Hilliard
1个回答

3
这是文档中的一个错误。我在官方漏洞跟踪器中提交了这个问题,并通过删除“integer”一词来修复了它:

我只是删除了类型描述,因为我认为常量的类型在这里并不重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接