Python 速查手冊

6.2 __str__()

__str__() 方法 (method) 是類別 (class) 的預設方法之一,這是物件 (object) 的字串 (string) 表達形式。

不同的物件利用內建函數 (built-in function) print() 會印出他們各自的字串表達形式,例如這裡整數 22 ,浮點數 22.0 ,字串 "22" ,以及含有一個整數 22 的串列 (list)

a = 22
print(a)
a = 22.0
print(a)
a="22"
print(a)
a = [22]
print(a)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:str04.py
# 功能:示範定義類別
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 str04.py
22
22.0
22
[22]
$

如果改成印出 __str__() 方法,這跟直接印出物件是相同的結果

a = 22
print(a.__str__())
a = 22.0
print(a.__str__())
a="22"
print(a.__str__())
a = [22]
print(a.__str__())

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:str05.py
# 功能:示範定義類別
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 str05.py
22
22.0
22
[22]
$

如果是印出自行定義的物件實體 (instance) ,例如這邊用 Demo() 建立的變數 (variable) d ,預設會印出類別名稱及實體物件所在的記憶體位址

class Demo:
    def __init__(self, i):
        self.i = i

d = Demo(9527)
print(d)
print(d.__str__())

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:str06.py
# 功能:示範定義類別
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 str06.py
<__main__.Demo object at 0x101fba358>
<__main__.Demo object at 0x101fba358>
$

反之想要印出物件專屬或是自行設定的訊息,這就得重新定義 __str__() 方法了,例如這邊 Demo2 類別的 __str__() 方法回傳屬性 i 的字串形式

class Demo2:
    def __init__(self, i):
        self.i = i
    
    def __str__(self):
        return str(self.i)

d = Demo2(9528)
print(d)
print(d.__str__())

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:str07.py
# 功能:示範定義類別
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 str07.py
9528
9528
$

上一頁: 6.1 __init__()
Python 速查手冊 - 目錄
下一頁: 6.3 __doc__
回 Python 教材首頁