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正確打印出來的原因。

TA貢獻1841條經驗 獲得超3個贊

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