对象的唯一标识符(从十六进制转换为十进制)

时间:2014-09-08 14:10:43

标签: python class python-2.7 object

我正在学习Python(本课程的课程)。在this网站(页面底部)第一次练习(13.7。练习下)说:

  

创建并打印Point对象,然后使用id打印对象的唯一标识符。将十六进制形式翻译成十进制并确认它们匹配。

我需要帮助,因为我不太清楚我明白自己要做什么。

如果我这样做:

class Point:
    pass

print Point()
print id(Point)

我得到了这个输出:

<__main__.Point instance at 0xb71c496c>
3072094252

那么,我应该像这样做第一部分运动吗?现在怎么办?我假设第二行是十进制数(我是对的吗?)。但第一线是什么?如何将其翻译成十进制?

1 个答案:

答案 0 :(得分:3)

使用hex() function将第二个数字转换为十六进制,然后测试它是否存在于第一个数字中:

p = Point()
hexadecimal_id = hex(id(p))
present = hexadecimal_id in repr(p)

请注意,我首先将参考存储到Point()实例;否则你会得到一个新的id()值。

另外,不要将课程与实例混淆;该类本身就是一个对象,因此也具有id()值。

换句话说,你必须解析出十六进制字符串;如果你打算假设它是最后一个空间之后的部分,那就是:

hexadecimal_id = repr(p).rpartition(' ')[-1][:-1]
present = int(hexadecimal_id, 16) == id(p)

在这里,str.rpartition() method在最后一个空格上进行分割,然后我们使用[-1](最后一个元素)对其后的内容进行分割,然后将 结果用一个字符短接到删除最后的>字符。

获得十六进制数后,可以将其解释为int() function的整数,将基数指定为16。

演示:

>>> class Point:
...     pass
... 
>>> p = Point()
>>> id(p)
4300021632
>>> hex(id(p))
'0x1004d1f80'
>>> p
<__main__.Point instance at 0x1004d1f80>
>>> hex(id(p)) in repr(p)
True
>>> # the other direction
... 
>>> repr(p).rpartition(' ')[-1][:-1]
'0x1004d1f80'
>>> hexadecimal_id = repr(p).rpartition(' ')[-1][:-1]
>>> int(hexadecimal_id, 16)
4300021632
>>> int(hexadecimal_id, 16) == id(p)
True