對象名稱重載__str__ 和__repr__

概述

在python中編寫類時,常常會看到雙下劃線的方法,如__init__ ,__str__等。這類方法稱爲魔法方法,這類方法通常會自動調用,不須要class.method()的形式進行手動調用。這裏簡介兩個用來描述對象信息/名稱的魔法方法,__str__和__repr__;當咱們想自定義某個對象/實例顯示(打印)的名稱時,就能夠用這兩個方法來定製,使得代碼在交互或者輸出時更具備可讀性python

  • str 的目標是可讀性,在print(對象)的時候,會自動調用該魔法方法進行輸出顯示;
  • __repr__的目標是準確性,在交互式編程中,對象的輸出會自動調用該方法來進行輸出顯示;

例子

class func(object):
    def __init__(self,a):
        self.a=a
>>>m=func(1)
>>>m  #交互式編程中,調用__repr__
<__main__.func object at 0x0000026C98D56A60> #顯示的是引用的對象地址id
>>>print(m)#調用__str__
<__main__.func object at 0x0000026C98D56A60>

能夠看到,若是不對這兩個方法進行重載,默認的對象打印都是輸出地址id編程

class func(object):
    def __init__(self,a):
        self.a=a
    def __str__(self):
        return 'func(a=%s)'%self.a
>>>n=func(1)
>>>n
<__main__.func object at 0x0000026C98D69A90> #未重載__repr__,仍打印id
>>>print(n)##重載了__str__,輸出自定義名稱
func(a=1)
#__repr__和__str__均重載
class func(object):
    def __init__(self,a):
        self.a=a
    def __str__(self):
        return 'func(a=%s)'%self.a
    def __repr__(self):
        return  'func(%s)'%self.a
>>>n=func(1)
>>>n
func(1)
>>>print(n)
func(a=1)

具體重載的實例能夠參考sklearn庫中的各個模型,如:code

>>>from sklearn.linear_model import LinearRegression
>>>model=LinearRegression()
>>>print(model)
LinearRegression()#這裏顯示的對象名稱就是重載事後的
相關文章
相關標籤/搜索