python中的str方法和repr方法_Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些
Python中 的 __str__ 方法和 __repr__ 方法的區別有哪些
發布時間:2020-11-05 17:11:48
來源:億速云
閱讀:95
作者:Leah
本篇文章給大家分享的是有關Python中 的 __str__ 方法和 __repr__ 方法的區別有哪些,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
閱讀到 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__ 方法
說明:在只定義了 __str__方法的情況下調試時 IntelliJ 在行內顯示對象為__str__的輸出,但變量窗口中顯示的是默認的__repr__的輸出
repr始終堅持調用默認的__repr__方法
str 轉型函數調用了 __str__方法
print調用了 __str__方法
只定義了 __repr__ 方法
說明:在只定義了 __repr__方法的情況下,可以看出 __repr__方法極其強勢,它壟斷了一切的調用,repr, str, 和 print函數,甚至是 IntelliJ 的調試顯示都必須以 __repr__方法為核心。以上所有的情況都是調用 __repr__ 方法,沒得選擇
同時定義了 __repr__ 和 __str__ 方法
說明:在同時定義了 __repr__和 __str__方法的情況下,__str__方法反而能扳回來。除了明確的 repr 會調用 __repr__方法,和調試時變量窗口中顯示對象會調用 __repr__方法外,其他時候都是 __str__ 占優。具體為repr 和 IntelliJ 調試時變量窗口顯示變量調用 __repr__ 方法
IntelliJ 調試時行內顯示變量調用了 __str__ 方法
str 轉型操作調用了對象的 __str__ 方法,這不能解釋為 informal 非正式的
print 調用了 __str__ 來獲得對象輸出字符串
另外,格式化字符串時的調用的對象方法與 print時是一樣的,例如下面的格式化代碼
f1 = "%s" % t
f2 = "{}".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中 的 __str__ 方法和 __repr__ 方法的区别有哪些的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python做var模型_【Python
- 下一篇: 配置DNS服务器的需要修改的配置文件为,