为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

莫回无 2022-11-01 16:54:10
例 1。class alpha:    passa1=alpha()print(a1)# output:<__main__.alpha object at 0x0000023CEFB9D040> 我想知道为什么对象值是十六进制值?无论如何转换为可理解的格式?
查看完整描述

4 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

默认情况下,一个类没有任何逻辑以可读的方式“表示”自己。当打印函数无法找到将对象转换为字符串的方法时,它将返回对象的内存信息。


如果您想要一个更具可读性的输出,您必须自己定义该行为。


我们以这三个类为例:


class Test:

    def __init__(self, name):

        self.name = name


class Test2(Test):

    def __str__(self):

        return self.name


class Test3(Test):

    def __repr__(self):

        return self.name

Test是原始类。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) # Silvia

print(var3) # Charles

看到列表中唯一正确表示的是var3,但是当我们将它们打印出来时,两者都var2返回var3了它们的属性name。


那是因为当在 say a 中表示变量时,list或者dict解释器尝试调用 objectsself.__repr__方法来查看如何表示它们。


但是,当尝试将对象转换为字符串时(正如 print 尝试做的那样),两者都self.__str__按self.__repr__顺序被调用。这就是为什么两者都var2可以var3正确打印出来的原因。


查看完整回答
反对 回复 2022-11-01
?
偶然的你

TA贡献1841条经验 获得超3个赞

有多种原因:

  1. 内存通常是一个非常大的数字,是 2 的幂。因此,十六进制表示用于压缩非常大的整数。

  2. 十六进制值与二进制值和具有以下幂的数字非常相关

你可以在这里详细说明。为什么计算机使用十六进制表示地址


查看完整回答
反对 回复 2022-11-01
?
慕村225694

TA贡献1880条经验 获得超4个赞

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



查看完整回答
反对 回复 2022-11-01
?
浮云间

TA贡献1829条经验 获得超4个赞

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



查看完整回答
反对 回复 2022-11-01
  • 4 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号