4 回答

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
默認(rèn)情況下,一個(gè)類沒有任何邏輯以可讀的方式“表示”自己。當(dāng)打印函數(shù)無法找到將對象轉(zhuǎn)換為字符串的方法時(shí),它將返回對象的內(nèi)存信息。
如果您想要一個(gè)更具可讀性的輸出,您必須自己定義該行為。
我們以這三個(gè)類為例:
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從 繼承結(jié)構(gòu)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,但是當(dāng)我們將它們打印出來時(shí),兩者都var2返回var3了它們的屬性name。
那是因?yàn)楫?dāng)在 say a 中表示變量時(shí),list或者dict解釋器嘗試調(diào)用 objectsself.__repr__方法來查看如何表示它們。
但是,當(dāng)嘗試將對象轉(zhuǎn)換為字符串時(shí)(正如 print 嘗試做的那樣),兩者都self.__str__按self.__repr__順序被調(diào)用。這就是為什么兩者都var2可以var3正確打印出來的原因。

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
有多種原因:
內(nèi)存通常是一個(gè)非常大的數(shù)字,是 2 的冪。因此,十六進(jìn)制表示用于壓縮非常大的整數(shù)。
十六進(jìn)制值與二進(jìn)制值和具有以下冪的數(shù)字非常相關(guān)
你可以在這里詳細(xì)說明。為什么計(jì)算機(jī)使用十六進(jìn)制表示地址

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
該print
函數(shù)最終需要一個(gè)字符串來寫入您的屏幕。它盡最大努力將各種數(shù)據(jù)類型轉(zhuǎn)換為良好的字符串表示形式,但對于您的類來說,它真的不可能知道使用什么是好的字符串。所以,最后的手段就是你所看到的:關(guān)于對象的一些細(xì)節(jié),以及它在內(nèi)存中的當(dāng)前位置(顯示為十六進(jìn)制地址)。
添加回答
舉報(bào)