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

Muh*_*šić 3 python class object python-2.7

我正在学习Python(目前正在上课)。在这个网站上(页面底部)第一个练习(在 13.7.练习下)说:

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

我需要这方面的帮助,因为我不太确定我明白我必须做什么。

如果我做:

class Point:
    pass

print Point()
print id(Point)
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

<__main__.Point instance at 0xb71c496c>
3072094252
Run Code Online (Sandbox Code Playgroud)

那么,我应该像这样进行练习的第一部分吗?现在怎么办?我假设第二行是十进制数(我对吗?)。但是第一行呢?如何将其转化为十进制?

Mar*_*ers 6

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

p = Point()
hexadecimal_id = hex(id(p))
present = hexadecimal_id in repr(p)
Run Code Online (Sandbox Code Playgroud)

请注意,我首先存储对实例的引用Point();否则你会得到一个具有潜在新id()价值的新的。

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

反之,你必须解析出十六进制字符串;如果您假设它是最后一个空格之后的部分,则可以执行以下操作:

hexadecimal_id = repr(p).rpartition(' ')[-1][:-1]
present = int(hexadecimal_id, 16) == id(p)
Run Code Online (Sandbox Code Playgroud)

在这里,该str.rpartition()方法在最后一个空格上进行分割,我们将其后面的任何内容与[-1](最后一个元素)一起取,然后将该结果短接一个字符以删除>末尾的字符。

获得十六进制数后,您可以使用函数将其解释为整数int()并将基数指定为 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
Run Code Online (Sandbox Code Playgroud)