__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 |
$ |
相關教學影片