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)
那么,我应该像这样进行练习的第一部分吗?现在怎么办?我假设第二行是十进制数(我对吗?)。但是第一行呢?如何将其转化为十进制?
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)
| 归档时间: |
|
| 查看次数: |
1778 次 |
| 最近记录: |