Python 3.1 快速導覽 - 類別 __str__()

類別 (class) 預設的 __str__() 方法 (method) 回傳實體 (instance) 物件 (object) 的字串 (string) 表達形式。我們先來看看一些常用資料型態 (data type) 的例子

a = 22 #1
print(a.__str__())
print(type(a.__str__()))
print()

a = 22.0 #2
print(a.__str__())
print(type(a.__str__()))
print()

a = "22" #3
print(a.__str__())
print(type(a.__str__()))
print()

a = [22] #4
print(a.__str__())
print(type(a.__str__()))

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:cla06.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行結果如下



第 1 組
a = 22 #1
print(a.__str__())
print(type(a.__str__()))


a 為整數 (integer) ,其字串形式如同 "22" 。


第 2 組
a = 22.0 #2
print(a.__str__())
print(type(a.__str__()))


a 為浮點數 (floating-point number) ,其字串形式如同 "22.0" 。


第 3 組
a = "22" #3
print(a.__str__())
print(type(a.__str__()))


a 就是字串,字串形式也就是 "22" 。


第 4 組
a = [22] #4
print(a.__str__())
print(type(a.__str__()))


a 為具有一個整數 22 的串列 (list) ,其字串形式如同 "[22]" 。


自行定義的類別預設的字串表達形式如下例
class Demo:
    def __init__(self, i):
        self.i = i
    
    def hello(self):
        print("hello", self.i)

a = Demo(1122)
a.hello()
print()
print(a.__str__())

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:cla07.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行結果如下



由於預設的方式是印出類別名稱,實體所在的記憶體位址,這未必是我們想要的,因此我們可以視需要改寫 (override) __str__() 方法,如下
class Demo:
    def __init__(self, i):
        self.i = i
    
    def __str__(self):
        return str(self.i)
         
    def hello(self):
        print("hello", self.i)

a = Demo(1122)
a.hello()
print()
print(a.__str__())

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:cla08.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行結果如下



第 5 行到第 6 行
def __str__(self):
    return str(self.i)


我們簡單的讓 Demo 的 __str__() 回傳一個運算式 (expression) ,這個運算式為以實體屬性 (attribute) self.i 當成參數 (parameter) ,呼叫 (call) 內建函數 (function) str() , str() 回傳包含該數值的字串物件。


這裡,由於我們將 a 的 self.i 設定成整數 1122 ,因此字串形式為 "1122" 。


中英文術語對照
類別class
方法method
實體instance
物件object
字串string
資料型態data type
整數integer
浮點數floating-point number
串列list
改寫override
運算式expression
屬性attribute
參數parameter
呼叫call
函數function






沒有留言: