对象名称重载\_\_str\_\_ 和\__repr__

本文介绍了Python中的__str__和__repr__魔法方法,用于自定义对象的显示名称和输出信息。__str__注重可读性,常在print()时调用,而__repr__追求准确性,适用于交互式环境。未重载时,对象默认输出其内存地址。文中以sklearn库为例展示如何实现方法的重载。

对象名称重载__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()#这里显示的对象名称就是重载过后的
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值