亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Python 的 __str__ 和 __repr__ 方法對比

瀏覽:5日期:2022-07-12 14:42:18

閱讀到 Strings 中關于轉換對象為字符串的內容,介紹了 repr 函數,趁著還沒有真正了解 Python 面向對象的生疏與熱度,感性上理解一下 repr 與 str 這兩個函數的區別。

Python 的全局方法 repr 和 str 會映射到對象的 __repr__ 和 __str__ 的方法調用,還有 str(obj) 時會調用哪個方法,以及 print(obj) 和調試 Python 代碼時的對象顯示會調用哪個方法呢?這就是本文想要印證的內容。

恰如 Java 的 System.out.println(obj) 或 'hello' + obj 都會調用 Java 對象的 toString() 方法,那么 Python 中是怎么一回事呢?

來自某本 Python 入門書的解釋 repr 和 str:

repr: formal string representation of a Python object str: informal string representation of a Python object,或者說 printable string representation

首先 repr 是 representation 的意思,一個是正式,另一個是非正式,看起來 repr 比 str 顯得重要些。

對于內置的 Python 對象我們可以用 repr, print, 和 str 函數,如針對 list 類型

>>> repr([1,2])’[1, 2]’>>> print([1,2])[1, 2]>>> str([1,2])’[1, 2]’

但是具體上面三個函數中分別調用了 list 的什么方法就不可而知了,這時候定義一個自己的類最能說明問題。測試環境為 IntelliJ, 以調試截圖來說明分別為 __str__ 和 __repr__ 幾種組合情況

只定義了 __str__ 方法

Python 的 __str__ 和 __repr__ 方法對比

說明:在只定義了 __str__ 方法的情況下

調試時 IntelliJ 在行內顯示對象為 __str__ 的輸出,但變量窗口中顯示的是默認的 __repr__ 的輸出 repr 始終堅持調用默認的 __repr__ 方法 str 轉型函數調用了 __str__ 方法 print 調用了 __str__ 方法

只定義了 __repr__ 方法

Python 的 __str__ 和 __repr__ 方法對比

說明:在只定義了 __repr__ 方法的情況下,可以看出 __repr__ 方法極其強勢,它壟斷了一切的調用,repr, str, 和 print 函數,甚至是 IntelliJ 的調試顯示都必須以 __repr__ 方法為核心。

以上所有的情況都是調用 __repr__ 方法,沒得選擇

同時定義了 __repr__ 和 __str__ 方法

Python 的 __str__ 和 __repr__ 方法對比

說明:在同時定義了 __repr__ 和 __str__ 方法的情況下,__str__ 方法反而能扳回來。除了明確的 repr 會調用 __repr__ 方法,和調試時變量窗口中顯示對象會調用 __repr__ 方法外,其他時候都是 __str__ 占優。具體為

repr 和 IntelliJ 調試時變量窗口顯示變量調用 __repr__ 方法 IntelliJ 調試時行內顯示變量調用了 __str__ 方法 str 轉型操作調用了對象的 __str__ 方法,這不能解釋為 informal 非正式的 print 調用了 __str__ 來獲得對象輸出字符串

另外,格式化字符串時的調用的對象方法與 print 時是一樣的,例如下面的格式化代碼

f1 = '%s' % tf2 = '{}'.format(t)

Python 不知道像 Java 那樣由字符串加上一個對象

'this is ' + t #Java 中會展開為 'this is ' + t.toString()

Python 會報以下錯誤

TypeError: can only concatenate str (not 'Test') to str

說這里的 + 號只能連接兩個字符串,除非定義了 __add__ 和 __radd__ 方法,對應關系分別為

t = Test()z1 = ’hello’ + t #相當于 t.__radd__(’hello’)z2 = t + ’hello’ #相當于 t.__add__(’hello’)

Python 的 __xyz__ 也挺魔幻的。

以上就是Python 的 __str__ 和 __repr__ 方法對比的詳細內容,更多關于Python __str__ 和 __repr__ 的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 中文字幕视频在线播放 | 亚洲人成在线观看男人自拍 | 日韩经典欧美精品一区 | 日韩欧美一区二区三区视频 | 欧美成人看片黄a免费 | 欧美精品一区二区精品久久 | 一及黄色毛片 | 亚洲码一区二区三区 | 俄罗斯女人与公拘i交酡 | 亚洲五月婷婷 | 日韩成人黄色片 | 天天躁夜夜躁很很躁2020 | 国产99在线 | 亚洲 | 特黄特色大片免费视频大全 | a毛片在线免费观看 | 青青免费视频精品一区二区 | 一级特黄录像实干片 | 国产精品久久精品牛牛影视 | 亚洲黄色三级网站 | 欧美一级www片免费观看 | 亚洲精品乱码国产精品乱码 | 麻豆igao在线视频 | 国产欧美日韩综合精品一区二区 | 亚洲一区二区三区免费看 | 色视频在线观看视频 | 亚洲成在人天堂一区二区 | 日韩美一区二区 | 中国国产一级毛片视频 | 91成人免费观看网站 | 国产精品免费αv视频 | 婷婷亚洲久悠悠色在线播放 | 国产亚洲欧美一区二区三区 | 日韩a级毛片 | 国内自拍在线视频高清 | 三级毛片在线 | 免费观看国产大片资源视频 | 久久五月视频 | 娇小被黑人巨嗷嗷叫 | 综合玖玖 | 免费观看成人碰视频公开 | 欧美毛片在线观看 |