日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中魔法方法__str__与__repr__的区别

發布時間:2025/3/20 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中魔法方法__str__与__repr__的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提出問題

當我們自定義一個類時,打印這個類對象或者在交互模式下直接輸入這個類對象按回車,默認顯示出來的信息好像用處不大。如下所示

In [1]: class People: ...: def __init__(self, name, sex): ...: self.name = name ...: self.sex = sex ...: In [2]: p = People('xiaoming', 'male') In [3]: p Out[3]: <__main__.People at 0x7fd0df745400>In [4]: print(p) <__main__.People object at 0x7fd0df745400>

可以發現,兩種方式顯示出來的信息都是對象所屬類的名稱以及對象所在的地址,而很多時候這不是我們想要的信息,此時我們可以通過重寫__str__和__repr__方法來定制我們想要的信息。

__str__與__repr__簡單介紹

__ str__ 和 __ repr__ 方法,是自定義類的字符串描述,當我們打印或查看某個對象時,最終看到的結果是這兩個方法的返回值。這兩個方法返回的都是字符串,但是什么時候調用__str__?什么時候調用__repr__?我們看下面的例子

類中只重寫了__str__方法

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' In [1]: class A: ...: def __str__(self): ...: return '__str__' ...: In [2]: a = A() In [3]: a Out[3]: <__main__.A at 0x7ffb3f2ba048>In [4]: print(a) __str__

在交互模式下,直接輸入對象再回車,返回的結果與原來一樣;但是打印對象時,觸發了__str__方法。

類中只重寫了__repr__方法

In [1]: class B: ...: def __repr__(self): ...: return '__repr__' ...: In [2]: b = B() In [3]: b Out[3]: __repr__In [4]: print(b) __repr__

在交互模式下,直接輸入對象再回車以及打印對象都觸發了__repr__方法。

類中重寫了__str__與__repr__方法

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' In [1]: class C: ...: def __str__(self): ...: return '__str__' ...: def __repr__(self): ...: return '__repr__' ...: In [2]: c = C() In [3]: c Out[3]: __repr__In [4]: print(c) __str__

在交互模式下,直接輸入對象再回車,觸發了__repr__方法;打印對象觸發__str__方法。

總結一下,當我們直接查看對象(輸入對象再回車)時,無論怎樣觸發的都是__repr__方法;如果自定義類中沒有重寫這個方法,我們知道Python3中都是新式類,即默認都繼承了object類,那么此時就會調用object中的__repr__方法。當我們打印對象時,大多數情況觸發的都是__str__方法,但當自定義類中只重寫了__repr__方法時,會觸發__repr__方法。

str()和repr()函數

str()默認觸發__str__方法,repr()默認觸發__repr__方法,觸發的機制與上述一樣;另外,列表、字典等容器總是會觸發__repr__方法,代碼示例如下:

# 類中只重寫了__str__方法 In [5]: str(a) Out[5]: '__str__'In [6]: repr(a) Out[6]: '<__main__.A object at 0x7ffb3f2ba048>'# 類中只重寫了__repr__方法 In [5]: str(b) Out[5]: '__repr__'In [6]: repr(b) Out[6]: '__repr__'# 類中重寫了__str__與__repr__方法 In [5]: str(c) Out[5]: '__str__'In [6]: repr(c) Out[6]: '__repr__'# 列表、字典等容器總是會觸發__repr__方法 In [53]: print([a]) [<__main__.A object at 0x7ffb3f2ba048>] In [7]: str([c]) Out[7]: '[__repr__]'In [8]: repr([c]) Out[8]: '[__repr__]'In [9]: [c] Out[9]: [__repr__]In [10]: print([c]) [__repr__]

__str__與__repr__的本質區別

那__str__與__repr__的本質區別到底是什么呢? 先看官方描述

  • __ str__: Called by str(object) and the built-in functions format() and print() to compute the “informal” or nicely printable string representation of an object.
  • __ repr__: Called by the repr() built-in function to compute the “official” string representation of an object. This is typically used for debugging, so it is important that the representation is information-rich and unambiguous.

總結一下,__str__是一個對象的非正式的、易于閱讀的字符串描述,當類str實例化( str(object) )時會被調用,以及會被內置函數format()和print()調用;__repr__是一個對象的官方的字符串描述,會被內置函數repr()方法調用,它的描述必須是信息豐富的和明確的。也就是說__str__返回的結果可讀性強,__repr__返回的結果更加準確。再看一個例子

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' In [1]: import datetime In [2]: d = datetime.datetime.now() In [3]: str(d) Out[3]: '2019-08-24 08:12:17.942242' # 可讀性強In [4]: repr(d) Out[4]: 'datetime.datetime(2019, 8, 24, 8, 12, 17, 942242)' # 信息更加豐富和準確

總結

  • 在自定義類中,可以通過重寫__str__和__repr__方法來定制類對象到字符串的轉化。
  • 一般情況下,推薦至少添加一個 __ repr__ 方法來定制對象到字符串的自定義轉化,__ str__ 是可選的。因為默認情況下,在需要卻找不到 __ str__ 方法的時候,會自動調用 __ repr__ 方法。
  • __str__方法的目標在于可讀性,__repr__方法的目標在于準確性。

總結

以上是生活随笔為你收集整理的python中魔法方法__str__与__repr__的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品成 | 国产69精品久久久久久久 | 精品九九视频 | 男女爽爽爽 | 91精品又粗又猛又爽 | 午夜av免费 | 国产第一精品视频 | 亚洲福利天堂 | 四虎精品在永久在线观看 | 少妇愉情理伦片bd | 欧美色射| 四虎国产精品永久在线国在线 | 精品久久久亚洲 | 男插女动态图 | 免费a在线观看 | 久草国产精品 | 国产美女一级视频 | 久久92| 五月亚洲婷婷 | 男人的天堂在线观看av | 中文天堂av | 91国偷自产一区二区三区观看 | 中文字幕中出 | 色撸撸在线视频 | 视频一区 中文字幕 | 久久综合亚洲色hezyo国产 | 污视频网站入口 | 91av欧美 | 诱惑の诱惑筱田优在线播放 | 久久久久久久久久久91 | 午夜影院一区二区 | 三级视频国产 | 本道综合精品 | 刘亦菲久久免费一区二区 | 日本三级黄在线观看 | 中文精品视频 | 国产女主播喷水高潮网红在线 | 天天爽网站 | 波多野结衣欲乱上班族 | 在线中文字幕观看 | 999久久久精品 | 91爱爱com | 国产精品wwww | 两根大肉大捧一进一出好爽视频 | 中文字幕一区二区三区四区免费看 | 性生交大片免费看狂欲 | 亚洲人久久 | 好男人www社区在线视频夜恋 | 97福利社| 少妇一级1淫片 | 兄弟兄弟全集免费观看 | 精品国精品国产 | 午夜国产精品视频 | 中国一及毛片 | 中文字幕自拍偷拍 | 99亚洲视频 | 亚洲国产精品区 | 久久最新精品 | 国产亚洲精久久久久久无码77777 | 中文字幕第3页 | 99国产精品国产精品九九 | 老司机免费在线视频 | 国产第113页 | 五月天青青草 | 特黄色大片| 午夜免费福利影院 | 乱老熟女一区二区三区 | 国产青草视频在线观看 | 丝袜调教91porn | 成人精品亚洲 | 国产精品精华液网站 | 区一区二在线观看 | 成年男女免费视频 | 精品国产免费人成在线观看 | 国产日本亚洲 | 亚洲精品国产欧美在线观看 | 天堂av免费观看 | 97色婷婷| 青娱乐福利视频 | 影音先锋中文在线 | 91欧美一区二区三区 | 天天操网| 雪花飘电影在线观看免费高清 | 1024香蕉视频 | 国产一区二区三区电影在线观看 | 国产aⅴ一区二区三区 | 国产精品国产三级国产专区51区 | 成人高清视频免费观看 | 久久老熟女一区二区三区 | 欧美日韩首页 | 少妇的性事hd | 伊人成人在线观看 | 19韩国主播青草vip | 国产视频手机在线播放 | 国产一级特黄视频 | 在线免费日韩av | 凹凸福利视频 | 色爱视频| 国产无遮挡免费 |