字符串转换内置方法

str(), repr()方法的使用
我们在定义了一个类后, 如果直接实例化并打印,会得不到自己想要的结果 ,默认的“转换字符串”功能非常的原始:

class Car():

    def __init__(self,color,mileage):
        self.color = color
        self.meileage = mileage
        
 my_car = Car('red', '33')
 print(my_car)

打印:

<__main__.Car object at 0x01449810>

可以看到得到的结果是一串内存地址,虽然有了结果, 但显然不是我们想要的, 当然, 你可以这样来获取属性:

print(my_car.color)
print(my_car.meileage)

这样思路正确, 但是忽略了python将对象转成字符串的约定和内存机制, 一个好的方法是想类中添加字符串方法 strrepr, 看一下实例:

class Car():

    def __init__(self,color,mileage):
        self.color = color
        self.meileage = mileage
    # 尝试将对象转化为字符串的方法
    def __str__(self):
        return f'a {self.color} car'
        
my_car = Car('red', '33')
print(my_car)

结果:

a red car

str方法是python中内置的字符串转换方法, 是一种以双下滑线规定的方法, 当然, 你也可以使用更人性化的方法,

print(str(my_car))
#或者:
print(my_car.__str__())

除了这种内置转换方法之外, 还要一种也就是 repr(), 使用它依然可以得到字符串转换后的结果:

class Car():

    def __init__(self,color,mileage):
        self.color = color
        self.meileage = mileage

    def __repr__(self):
        return f' {self.meileage} mileage'


my_car = Car('red', '33')
# 结果
# 33 mileage for Car

str() 与repr()的区别
可以看出, 这两个方法都是字符串转换的方法, 但是这两个方法有什么不同呢?

import datetime
t = datetime.datetime.today() 

首先导入datetime模块, 打印分别使用两个内置方法打印今天的日期:

print(str(t))
print(t.__repr__())

打印:

2019-08-19 09:39:17.885315
datetime.datetime(2019, 8, 19, 9, 39, 17, 885315)

比较二者的结果可以得出结果, str()方法侧重的是可读性, 也就是说更加人性化的结果或者答案, 能够熟悉的理解的答案,而__repr__()方法则更侧重于得到无歧义的结果, 更倾向于开发人员来调试程序。

为什么添加__repr()__方法
上面说了两个类的区别, 可能就有小伙伴说了, 既然repr()方法更倾向于调试程序, 为什么还要在定义的类中添加呢, 因为如果在定义的类中如果不提供__str()__方法,程序会默认寻找__repr()方法, 所以我们最好总是在定义一个str()后,在定义一个repr()方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值