当前位置: 首页 > 后端技术 > Python

对象名重载__str__和__repr__

时间:2023-03-26 11:19:41 Python

概述在python中写类时,经常会看到带有双下划线的方法,如__init__、__str__等,这类方法称为魔术方法,一般会自动调用,不需要被调用以class.method()的形式手动调用。这里有两个用来描述对象信息/名称的魔术方法,__str__和__repr__;当我们想要自定义一个对象/实例显示(打印)的名称时,我们可以使用这两个方法来自定义,从而使代码在交互或输出时更具可读性。str的目标是可读性。打印(object)时,会自动调用这个魔术方法进行输出显示;__repr__的目标是准确性。在交互式编程中,对象的输出会自动调用该方法进行输出显示;exampleclassfunc(object):def__init__(self,a):self.a=a>>>m=func(1)>>>m#Interactive在编程中,调用__repr__<__main__.funcobjectat0x0000026C98D56A60>#Display引用的对象地址id>>>print(m)#Call__str__<__main__.funcobjectat0x0000026C98D56A60>,可以看到,如果不重载这个方法,默认对象打印是输出地址idclassfunc(object):def__init__(self,a):self.a=adef__str__(self):return'func(a=%s)'%self.a>>>n=func(1)>>>n<__main__。funcobjectat0x0000026C98D69A90>#Notoverloaded__repr__,stillprintid>>>print(n)##Overloaded__str__,outputCustomnamefunc(a=1)#__repr__和__str__都重载了classfunc(object):def__init__(self,a):self.a=adef__str__(self):return'func(a=%s)'%self.adef__repr__(self):return'func(%s)'%self.a>>>n=函数(1)>>>nfunc(1)>>>print(n)func(a=1)具体的重载例子可以参考sklearn库中各个模型,如:>>>fromsklearn.linear_modelimportLinearRegression>>>model=LinearRegression()>>>print(model)LinearRegression()#这里显示的对象名称是重载后的