Python中__str__函数和__repr__函数的区别

本文详细解析了Python中__str__与__repr__方法的使用区别及优先级,通过实例展示了两者在类实例化时的调用顺序和使用要求,帮助读者深入理解Python对象的字符串表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

python中定义一个类时,常用__str__以及__repr__函数输出这个类的具体描述,但这两个函数具体又有些什么区别呢?一句话总结的话:__repr__比__str__的使用要求更加严格,优先级更低。

优先级比较

class My_func (object):
    def __init__(self,name):
        self.name=name

    def __str__(self):
        print("这是一个__str__函数")
        return self.name
    def __repr__(self):
        print("这是一个__repr__函数")
        return self.name
def main():
    fun=My_func('doge')
    print(fun)
if __name__=='__main__':
    main()

运行结果:

这是一个__str__函数
doge

从上面可以看出,当使用print()输出类的描述时,会优先寻找__str__函数的解释。

使用要求比较:

无str

class My_func (object):
    def __init__(self,name):
        self.name=name
    def __repr__(self):
        print("这是一个__repr__函数")
        return self.name
def main():
    fun=My_func('doge')
    print(str(fun))
if __name__=='__main__':
    main()

运行结果:

这是一个__repr__函数
doge

如上所示,当类方法中没有定义__str__时,调用__str__函数并不会输出默认的地址值,而是会调用存在的__repr__函数

无repr

class My_func (object):
    def __init__(self,name):
        self.name=name
    def __str__(self):
        print("这是一个__str__函数")
        return self.name
def main():
    fun=My_func('doge')
    print(repr(fun))
if __name__=='__main__':
    main()

结果:

<__main__.My_func object at 0x000001F1E4072518>

当类中并没有定义__repr__时,不会再调用__str__,而是会直接输出默认值即内存中的地址。

另:这两个函数的return值都应该是字符,不能return一个整型或其他值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值