python __str__() 和 __repr__()是干啥的


 

 

1. 沒定義__str__() print的時候得不到自己想要的東西

 

類默認轉化的字符串基本沒有我們想要的一些東西,僅僅包含了類的名稱以及實例的 ID (理解為 Python 對象的內存地址即可)。雖說這總比沒有好,但確實是沒什么用處啊。

所以,我們可能會手動打印對象的一些屬性或者是在類里自己實現一個方法來返回我們需要的信息

 

 

 

2.使用 __str__ 實現類到字符串的轉化

 

3.另一個就是 __repr__ 方法。后者的工作方式與前者類似,但是它被調用的時機不同

 另外,列表以及字典等容器總是會使用 __repr__ 方法。即使你顯式的調用 str 方法,也是如此。

 

如果我們需要顯示的指定以何種方式進行類到字符串的轉化,我們可以使用內置的 str() 或 repr() 方法,它們會調用類中對應的雙下划線方法。

 

 

4.__str__ 和 __repr__ 的差別是什么

__str__ 和 __repr__ 的差別究竟在哪里,它們的功能都是實現類到字符串的轉化,它們的特定並沒有體現出用途上的差異。

 

 

因此,我們有個初步的答案。

__str__ 的返回結果可讀性強。也就是說,__str__ 的意義是得到便於人們閱讀的信息,就像上面的 '2018-04-03' 一樣。

__repr__ 的返回結果應更准確。怎么說,__repr__ 存在的目的在於調試,便於開發者使用。細心的讀者會發現將 __repr__ 返回的方式直接復制到命令行上,是可以直接執行的。

上面應該就是這兩個方法的意義所在吧

 

5.自己寫class的時候要加__repr__

如果你沒有添加 __str__ 方法,Python 在需要該方法但找不到的時候,它會去調用 __repr__ 方法。因此,我推薦在寫自己的類的時候至少添加一個 __repr__ 方法,這能保證類到字符串始終有一個有效的自定義轉換方式。

 

 

參考:http://baijiahao.baidu.com/s?id=1596817611604972751&wfr=spider&for=pc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM