Python中__str__和__repr__的区别

1、前言

class People:
    def __init__(self,name,sex):
        self.name = name
        self.sex = sex

p = People('xiaoming','male')

'''
In:p
OutPut:<__main__.People at 0x7fddfeif>


In:print(p)
OutPut:<__main__.People at 0x7fddfeif>
'''
  • 两种方式显示出来的信息都是对象所属类的名称以及对象所在的地址。
  • 通过重写__str__和__repr__方法来定制我们想要的信息。

2、str&repr方法

strrepr方法,是自定义类的字符串描述,当我们打印或查看某个对象时,最终看到的结果就是这两个方法的返回值。

2.1、重写str方法


class A:
    def __str__(self):
        return '__str__'

a = A()


'''
In:a
OutPut:<__main__.People at 0x7fddfeif>

In:print(a)

OutPut:__str__

'''

直接输入对象再回车,返回的结果与原来一样;但是打印打印对象时,触发了__str__方法。

2.2、重写__repr__


class B:
    def __repr__(self):
        return '__repr__'

b = B()

'''
In:b
OutPut:__repr__

In:print(b)
OutPut:__repr__
'''

直接输入b和通过print打印都是调用了__repr__方法。

2.3、重写__str__&__repr__方法

class C:
    def __str__(self):
        return '__str__'
    def __repr__(self):
        return '__repr__'


c = C()

'''
In:c
OutPut:__repr__

In:print(c)
OutPut:__str__

'''

  • 交互模式下,直接输入对象c,调用的是__repr__方法
  • 打印对象的时候,直接调用如果有__str__方法,则直接调用__str__方法,如果没有则调用__repr__方法,如果两个方法都没有,则正常打印类的内存地址信息。

3、总结

  • __str__是一个对象的非正式的、易于阅读的字符串描述,当类str实例化(str(object))时会被调用,以及会被内置函数format()和print()调用;
  • __repr__是一个对象的官方字符串描述,会被内置函数repr()方法调用,它的描述必须是信息丰富和明确的。也就是说__str__返回的结果可读性强,__repr__返回的结果更加准确。
import datetime

d = datetime.datetime.now()

In: str(d)                                                                  
OutPut: '2019-08-24 08:12:17.942242'    # 可读性强

In: repr(d)                                                                 
OutPut: 'datetime.datetime(2019, 8, 24, 8, 12, 17, 942242)'    # 信息更加丰富和准确


Reference

python中魔法方法__str__与__repr__的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值