在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()#这里显示的对象名称就是重载事后的