猿问

为什么打印后对象在python中以十六进制显示?

例 1。


class alpha:

    pass


a1=alpha()

print(a1)


# output:

<__main__.alpha object at 0x0000023CEFB9D040> 

我想知道为什么对象值是十六进制值?无论如何转换为可理解的格式?


莫回无
浏览 218回答 4
4回答

万千封印

默认情况下,一个类没有任何逻辑以可读的方式“表示”自己。当打印函数无法找到将对象转换为字符串的方法时,它将返回对象的内存信息。如果您想要一个更具可读性的输出,您必须自己定义该行为。我们以这三个类为例:class Test:&nbsp; &nbsp; def __init__(self, name):&nbsp; &nbsp; &nbsp; &nbsp; self.name = nameclass Test2(Test):&nbsp; &nbsp; def __str__(self):&nbsp; &nbsp; &nbsp; &nbsp; return self.nameclass Test3(Test):&nbsp; &nbsp; def __repr__(self):&nbsp; &nbsp; &nbsp; &nbsp; return self.nameTest是原始类。Test2并Test3从 继承结构Test。我们可以使用不同的类定义变量并尝试在列表中打印它们,然后分别:var1 = Test("Abraham")var2 = Test2("Silvia")var3 = Test3("Charles")var_list = [var1, var2, var3]print(var_list) # [<__main__.Test object at 0x02BBA118>, <__main__.Test2 object at 0x02BBA370>, Charles]print(var1) # <__main__.Test object at 0x02BBA118>print(var2) # Silviaprint(var3) # Charles看到列表中唯一正确表示的是var3,但是当我们将它们打印出来时,两者都var2返回var3了它们的属性name。那是因为当在 say a 中表示变量时,list或者dict解释器尝试调用 objectsself.__repr__方法来查看如何表示它们。但是,当尝试将对象转换为字符串时(正如 print 尝试做的那样),两者都self.__str__按self.__repr__顺序被调用。这就是为什么两者都var2可以var3正确打印出来的原因。

偶然的你

有多种原因:内存通常是一个非常大的数字,是 2 的幂。因此,十六进制表示用于压缩非常大的整数。十六进制值与二进制值和具有以下幂的数字非常相关你可以在这里详细说明。为什么计算机使用十六进制表示地址

慕村225694

您正在打印一个没有__str__功能的对象。正如Ganesh Saptue所说,这是对象的默认输出。

浮云间

该print函数最终需要一个字符串来写入您的屏幕。它尽最大努力将各种数据类型转换为良好的字符串表示形式,但对于您的类来说,它真的不可能知道使用什么是好的字符串。所以,最后的手段就是你所看到的:关于对象的一些细节,以及它在内存中的当前位置(显示为十六进制地址)。
随时随地看视频慕课网APP

相关分类

Python
我要回答