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