兩個方法的作用:將類信息轉換成字符串形式的內容,讓用戶和開發人員獲得類的更多信息。
先看例子
>>> class A:
pass
>>> a1 = A()
>>> a1
<__main__.A object at 0x000000000302C358>
>>> print(a1)
<__main__.A object at 0x000000000302C358>
這樣,智能知道A這個對象,並沒有其他可讀信息。
>>> class A:
def __str__(self):
return "into __str__"
>>> a1 = A()
>>> a1
<__main__.A object at 0x00000000033712E8>
>>> print a1
into __str__
可以知道,用print會調用__str__方法,可以打印出__str__中的信息,所以,當我們需要這個類需要返回哪些額外信息是,可以先設定好。
>>> class A:
def __repr__(self):
return "into __repr__"
>>> a1 = A()
>>> a1
into __repr__
>>> print(a1)
into __repr__
當在類中重寫了__repr__方法,直接輸出a1,不再是返回類對象,而是調用了__repr__方法。
在這裏,顯示相同的結果,是因爲print會優先調用重寫的__str__方法,如果__str__沒有重寫,會調用重寫的__repr__方法。
當兩個方法都重寫時:
>>> class A:
def __str__(self):
return "into __str__"
def __repr__(self):
return "into __repr__"
>>> a1 = A()
>>> a1
into __repr__
>>> print(a1)
into __str__
直接輸出a1 會進入重寫的__repr__方法,print會進入重寫的__str__方法。
總結:
1、用print去打印 實例,調用順序是:重寫的__str__方法>重寫的__repr__方法>未重寫的__str__方法>未重寫的__repr__方法
2、__str__實際上是調用了__repr__
————————————————
版權聲明:本文爲CSDN博主「yusuiyu」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yusuiyu/article/details/87884977