乐趣区

关于python:对象名称重载str-和repr

概述

在 python 中编写类时,常常会看到双下划线的办法,如__init__ ,__str__等。这类办法称为魔法办法,这类办法个别会主动调用,不须要 class.method()的模式进行手动调用。这里简介两个用来形容对象信息 / 名称的魔法办法,__str__和__repr__; 当咱们想自定义某个对象 / 实例显示(打印)的名称时,就能够用这两个办法来定制,使得代码在交互或者输入时更具备可读性

  • 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 库中的各个模型,如:

>>>from sklearn.linear_model import LinearRegression
>>>model=LinearRegression()
>>>print(model)
LinearRegression()# 这里显示的对象名称就是重载过后的 
退出移动版