很多時候我們自己撰寫一個類,在將它的實體在終端上列印或查看的時候,我們往往會看到一個不太滿意的結果,所以,我們可能會手動列印物件的一些屬性或者是在類里自己實作一個方法來回傳我們需要的資訊,
使用__str__方法實作類到字串的轉化
class Car:
def __init__(self, color):
self.color = color
def __str__(self):
return f'a {self.color} car'
my_car = Car('red')
print(my_car)
my_car
str(my_car)
'{}'.format(my_car)
輸出結果
a red car
<__main__.Car object at 0x000001BEDBDDEC18>
'a red car'
'a red car'
有了 str 這個方法,你就不用手動去列印物件的一些資訊或者添加額外的方法去達到目的,類到字串的轉化使用 str 這種 Pythonic 的方式實作即可,
使用__repr__實作類到字串的轉化
__repr__的作業方式與__str__類似,但是它被呼叫的時機不同,
class Car:
def __init__(self, color):
self.color = color
def __str__(self):
return '__str__ for car'
def __repr__(self):
return '__repr__ for car'
my_car = Car('red')
print(my_car)
'{}'.format(my_car)
my_car
輸出結果
__str__ for car
'__str__ for car'
__repr__ for car
從這個操作我們可以看出什么時候呼叫str什么時候呼叫repr,
另外,串列以及字典等容器總是會使用 repr 方法,即使你顯式的呼叫 str 方法,也是如此,
__str__和__repr__的差別
import datetime
today = datetime.date.today()
today
str(today)
repr(today)
輸出結果
datetime.date(2020, 4, 22)
'2020-04-22'
'datetime.date(2020, 4, 22)'
因此,我們有個初步的答案,
__str__的回傳結果可讀性強,__str__的意義是得到便于人們閱讀的資訊,
__repr__的回傳結果應更準確,__repr__存在的目的在于除錯,便于開發者使用,將__repr__回傳的方式直接復制到命令列上,是可以直接執行的,
由上我們可以總結出使用__str__和__repr__方法定義類到字串的轉化方式,而不需要手動列印某些屬性或是添加額外的方法,__str__的回傳結果在于強可讀性,而__repr__的回傳結果在于準確性,我們至少需要添加一個__repr__方法來保證類到字串的自定義轉化的有效性,__str__是可選的,因為默認情況下,在需要卻找不到__str__方法的時候,會自動呼叫 __repr__方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/154821.html
標籤:Python
下一篇:Python常用68個內置函式
