亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么打印后對象在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 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號