您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)Python中 的 __str__ 方法和 __repr__ 方法的區(qū)別有哪些,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
閱讀到 Strings 中關(guān)于轉(zhuǎn)換對(duì)象為字符串的內(nèi)容,介紹了 repr
函數(shù),趁著還沒有真正了解 Python 面向?qū)ο蟮纳枧c熱度,感性上理解一下 repr
與 str
這兩個(gè)函數(shù)的區(qū)別。
Python 的全局方法 repr
和 str
會(huì)映射到對(duì)象的 __repr__ 和 __str__ 的方法調(diào)用,還有 str(obj)
時(shí)會(huì)調(diào)用哪個(gè)方法,以及 print(obj)
和調(diào)試 Python 代碼時(shí)的對(duì)象顯示會(huì)調(diào)用哪個(gè)方法呢?這就是本文想要印證的內(nèi)容。
恰如 Java 的 System.out.println(obj)
或 "hello" + obj
都會(huì)調(diào)用 Java 對(duì)象的 toString()
方法,那么 Python 中是怎么一回事呢?
來自某本 Python 入門書的解釋 repr
和 str
:
首先 repr
是 representation 的意思,一個(gè)是正式,另一個(gè)是非正式,看起來 repr
比 str
顯得重要些。
對(duì)于內(nèi)置的 Python 對(duì)象我們可以用 repr
, print
, 和 str
函數(shù),如針對(duì) list
類型
>>> repr([1,2]) '[1, 2]' >>> print([1,2]) [1, 2] >>> str([1,2]) '[1, 2]'
但是具體上面三個(gè)函數(shù)中分別調(diào)用了 list 的什么方法就不可而知了,這時(shí)候定義一個(gè)自己的類最能說明問題。測(cè)試環(huán)境為 IntelliJ, 以調(diào)試截圖來說明分別為 __str__
和 __repr__
幾種組合情況
只定義了 __str__ 方法
說明:在只定義了 __str__
方法的情況下
__str__
的輸出,但變量窗口中顯示的是默認(rèn)的 __repr__
的輸出repr
始終堅(jiān)持調(diào)用默認(rèn)的 __repr__
方法str
轉(zhuǎn)型函數(shù)調(diào)用了 __str__
方法print
調(diào)用了 __str__
方法只定義了 __repr__ 方法
說明:在只定義了 __repr__
方法的情況下,可以看出 __repr__
方法極其強(qiáng)勢(shì),它壟斷了一切的調(diào)用,repr
, str
, 和 print
函數(shù),甚至是 IntelliJ 的調(diào)試顯示都必須以 __repr__
方法為核心。
同時(shí)定義了 __repr__ 和 __str__ 方法
說明:在同時(shí)定義了 __repr__
和 __str__
方法的情況下,__str__
方法反而能扳回來。除了明確的 repr
會(huì)調(diào)用 __repr__
方法,和調(diào)試時(shí)變量窗口中顯示對(duì)象會(huì)調(diào)用 __repr__
方法外,其他時(shí)候都是 __str__
占優(yōu)。具體為
另外,格式化字符串時(shí)的調(diào)用的對(duì)象方法與 print
時(shí)是一樣的,例如下面的格式化代碼
f1 = "%s" % t f2 = "{}".format(t)
Python 不知道像 Java 那樣由字符串加上一個(gè)對(duì)象
"this is " + t #Java 中會(huì)展開為 "this is " + t.toString()
Python 會(huì)報(bào)以下錯(cuò)誤
TypeError: can only concatenate str (not "Test") to str
說這里的 + 號(hào)只能連接兩個(gè)字符串,除非定義了 __add__
和 __radd__
方法,對(duì)應(yīng)關(guān)系分別為
t = Test() z1 = 'hello' + t #相當(dāng)于 t.__radd__('hello') z2 = t + 'hello' #相當(dāng)于 t.__add__('hello')
Python 的 __xyz__
也挺魔幻的。
以上就是Python中 的 __str__ 方法和 __repr__ 方法的區(qū)別有哪些,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。