最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 的 __str__ 和 __repr__ 方法對(duì)比

 更新時(shí)間:2020年09月02日 11:31:18   作者:Yanbin  
這篇文章主要介紹了Python 的 __str__ 和 __repr__ 方法的相關(guān)資料,幫助大家區(qū)分__str__ 和 __repr__ ,感興趣的朋友可以了解下

閱讀到 Strings 中關(guān)于轉(zhuǎn)換對(duì)象為字符串的內(nèi)容,介紹了 repr 函數(shù),趁著還沒有真正了解 Python 面向?qū)ο蟮纳枧c熱度,感性上理解一下 reprstr 這兩個(gè)函數(shù)的區(qū)別。

Python 的全局方法 reprstr 會(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 中是怎么一回事呢?

來(lái)自某本 Python 入門書的解釋 repr str:

  1. repr: formal string representation of a Python object
  2. str: informal string representation of a Python object,或者說(shuō) printable string representation

首先 repr 是 representation 的意思,一個(gè)是正式,另一個(gè)是非正式,看起來(lái) reprstr 顯得重要些。

對(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è)自己的類最能說(shuō)明問(wèn)題。測(cè)試環(huán)境為 IntelliJ, 以調(diào)試截圖來(lái)說(shuō)明分別為 __str__ __repr__ 幾種組合情況

只定義了 __str__ 方法

說(shuō)明:在只定義了 __str__ 方法的情況下

  1. 調(diào)試時(shí) IntelliJ 在行內(nèi)顯示對(duì)象為 __str__ 的輸出,但變量窗口中顯示的是默認(rèn)的 __repr__ 的輸出
  2. repr 始終堅(jiān)持調(diào)用默認(rèn)的 __repr__ 方法
  3. str 轉(zhuǎn)型函數(shù)調(diào)用了 __str__ 方法
  4. print 調(diào)用了 __str__ 方法

只定義了 __repr__ 方法

說(shuō)明:在只定義了 __repr__ 方法的情況下,可以看出 __repr__ 方法極其強(qiáng)勢(shì),它壟斷了一切的調(diào)用,repr, str, 和 print 函數(shù),甚至是 IntelliJ 的調(diào)試顯示都必須以 __repr__ 方法為核心。

  1. 以上所有的情況都是調(diào)用 __repr__ 方法,沒得選擇

同時(shí)定義了 __repr__ 和 __str__ 方法

說(shuō)明:在同時(shí)定義了 __repr__ __str__ 方法的情況下,__str__ 方法反而能扳回來(lái)。除了明確的 repr 會(huì)調(diào)用 __repr__ 方法,和調(diào)試時(shí)變量窗口中顯示對(duì)象會(huì)調(diào)用 __repr__ 方法外,其他時(shí)候都是 __str__ 占優(yōu)。具體為

  1. repr 和 IntelliJ 調(diào)試時(shí)變量窗口顯示變量調(diào)用 __repr__ 方法
  2. IntelliJ 調(diào)試時(shí)行內(nèi)顯示變量調(diào)用了 __str__ 方法
  3. str 轉(zhuǎn)型操作調(diào)用了對(duì)象的 __str__ 方法,這不能解釋為 informal 非正式的
  4. print 調(diào)用了 __str__ 來(lái)獲得對(duì)象輸出字符串

另外,格式化字符串時(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

說(shuō)這里的 + 號(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__ 方法對(duì)比的詳細(xì)內(nèi)容,更多關(guān)于Python __str__ 和 __repr__ 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在pycharm中創(chuàng)建django項(xiàng)目的示例代碼

    在pycharm中創(chuàng)建django項(xiàng)目的示例代碼

    這篇文章主要介紹了在pycharm中創(chuàng)建django項(xiàng)目的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • pycharm 使用心得(一)安裝和首次使用

    pycharm 使用心得(一)安裝和首次使用

    PyCharm 是我用過(guò)的python編輯器中,比較順手的一個(gè)。而且可以跨平臺(tái),在macos和windows下面都可以用,這點(diǎn)比較好。
    2014-06-06
  • Tensorflow與RNN、雙向LSTM等的踩坑記錄及解決

    Tensorflow與RNN、雙向LSTM等的踩坑記錄及解決

    這篇文章主要介紹了Tensorflow與RNN、雙向LSTM等的踩坑記錄及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python如何求2-1000內(nèi)的所有回文素?cái)?shù)

    python如何求2-1000內(nèi)的所有回文素?cái)?shù)

    這篇文章主要介紹了python如何求2-1000內(nèi)的所有回文素?cái)?shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 教你快速上手Selenium爬蟲,萬(wàn)物皆可爬

    教你快速上手Selenium爬蟲,萬(wàn)物皆可爬

    這篇文章主要介紹了教你如何快速上手Selenium,文中附含詳細(xì)示例代碼,包含基本使用以及操作步驟,有需要的朋友可以參考下,希望大家多多討論交流
    2021-08-08
  • Python讀取xlsx文件報(bào)錯(cuò):xlrd.biffh.XLRDError:?Excel?xlsx?file;not?supported問(wèn)題解決

    Python讀取xlsx文件報(bào)錯(cuò):xlrd.biffh.XLRDError:?Excel?xlsx?file;no

    這篇文章主要給大家介紹了關(guān)于Python庫(kù)xlrd中的xlrd.open_workbook()函數(shù)讀取xlsx文件報(bào)錯(cuò):xlrd.biffh.XLRDError:?Excel?xlsx?file;not?supported問(wèn)題解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Python中的異步:async?和?await以及操作中的事件循環(huán)、回調(diào)和異常

    Python中的異步:async?和?await以及操作中的事件循環(huán)、回調(diào)和異常

    在現(xiàn)代編程中,異步操作在處理?I/O?密集型任務(wù)時(shí),可以顯著提高程序的性能和響應(yīng)速度,Python?提供了?async?和?await?關(guān)鍵字,使得編寫異步代碼變得更加直觀和簡(jiǎn)潔,在這篇文章中,我們將深入探討?Python?的異步操作,并通過(guò)實(shí)際代碼示例來(lái)說(shuō)明其使用方法
    2024-12-12
  • python CMD命令行傳參實(shí)現(xiàn)方法(argparse、click、fire)

    python CMD命令行傳參實(shí)現(xiàn)方法(argparse、click、fire)

    這篇文章主要介紹了python CMD命令行傳參實(shí)現(xiàn)方法(argparse、click、fire),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • python中Pexpect的工作流程實(shí)例講解

    python中Pexpect的工作流程實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python中Pexpect的工作流程實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • Python面向?qū)ο筮M(jìn)階學(xué)習(xí)

    Python面向?qū)ο筮M(jìn)階學(xué)習(xí)

    在本文里我們整理了關(guān)于Python面向?qū)ο蟮倪M(jìn)階學(xué)習(xí)知識(shí)點(diǎn)以及學(xué)習(xí)路線等內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-05-05

最新評(píng)論

大关县| 巢湖市| 姜堰市| 长白| 长白| 天门市| 邵武市| 永和县| 都安| 城市| 贵港市| 成安县| 方山县| 孟州市| 海丰县| 繁峙县| 锡林浩特市| 图们市| 玉树县| 庄浪县| 卓尼县| 宜兰县| 安多县| 黔西| 平陆县| 友谊县| 蒲江县| 台南市| 北京市| 白河县| 德安县| 旌德县| 璧山县| 新龙县| 巴塘县| 龙井市| 志丹县| 惠东县| 托克托县| 永德县| 龙海市|