Python学习笔记 1-字符串表示__repr__和__str__

本文探讨了Python中用于字符串表示的特殊方法`__repr__`和`__str__`。`__repr__`通常提供类似源代码的表示,用于程序员调试,而`__str__`则生成更符合自然语言的描述,适合普通用户。在没有实现`__str__`时,Python会默认使用`__repr__`。通过示例展示了这两个方法在深度学习框架PyTorch中定义模型时的作用。

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

文章目录

字符串表示

Python的数据模型提供了两个特殊函数来让用户个性化一个类实例的字符串表示,分别是__repr____str__。举《Fluent Python》书中的例子,实现一个简单的二维向量:

class Vector:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
    
    def __repr__(self):
        return 'Vector(%r, %r)' % (self.x, self.y)
    
    def __str__(self):
        return 'Just a 2-d vector (%r, %r)' % (self.x, self.y)
>>> v = Vector(1, 2)
>>> print(repr(v))
Vector(1, 2)
>>> print(str(v))
Just a 2-d vector (1, 2)
>>> print(v)
Just a 2-d vector (1, 2)

可以看到,__repr____str__都可以给出一个类实例的字符串表示,但他们的用法有些区别:

  • __repr__给出的字符串表示一般就跟你创建这个实例的源代码一样,即Vector(1, 2);所以它一般面向programmer,通常用于打日志以及调试的时候使用。(但奇怪,自己在Pycharm里进行调试的时候使用的字符串表示是__str__,如下图)
    在这里插入图片描述
  • __str__给出的字符串表示一般更加接近人类的自然语言描述,有语义信息;所以它一般面向普通用户,像print函数用的就是__str__

如果你只想实现其中一个函数,书中建议实现__repr__,因为当__str__没有实现的时候,Python解释器会调用__repr__作为备选方案。

用途

字符串表示有非常多的用途,举目前很流行的深度学习框架pytorch,当需要定义自己的模型时,我们一般重载nn.Module类,然后指定网络结构。Pytorch框架自己重载了__repr__的实现,于是我们可以在终端打印自己定义的模型:

from torchvision import models

vgg = models.vgg11()
print(vgg)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值