快捷搜索:  汽车  科技

python3 str(python3str和repr怎么用看过来了)

python3 str(python3str和repr怎么用看过来了)那下面这样的格式看起来是不是好一点。所以为了解决这个问题,特别需要知道的就是__str__()和__repr__()这里为什么会这样讲呢?需要解释一下的。Python是对象编程语言,一切皆对象。所以,编程中很多时候都是用的对象的思想,那么对象本身和机器的交互由解释器完成,那么对象对于我们而言,如果知识一个object,那么看上去一点都不友好。class Student: def __init__(self name age score): self.name = name self.age = age self.score = score def read(self): pass s =Student("小明" 12 88) print(s) "C:\Program F

无聊的使用案例

关于str和repr,网上有很多的介绍,个人觉得那并非在编程中常常使用的场景。比如下面的例子。

region = "CHINA" print(region) print(str(region)) print(repr(region)) #运行结果 "C:\Program Files\Python38\python3.exe" D:/python/python_210710/exercise_03/str_repr.py CHINA CHINA 'CHINA'

编码的是为了方便人来阅读的,所以呢,个人觉得对于一个变量来说,它是什么格式,值是什么,print和type就可以给我们答案,这里并不需要使用什么str和repr的转换了,多此一举。

那么真正的str和repr有什么用呢?他们又是什么呢?

python3 str(python3str和repr怎么用看过来了)(1)

使用场景

__str__()函数:将值转化为适于人阅读的字符串的形式
__repr__()函数:将值转化为供解释器读取的字符串形式

这里为什么会这样讲呢?需要解释一下的。

Python是对象编程语言,一切皆对象。所以,编程中很多时候都是用的对象的思想,那么对象本身和机器的交互由解释器完成,那么对象对于我们而言,如果知识一个object,那么看上去一点都不友好。

class Student: def __init__(self name age score): self.name = name self.age = age self.score = score def read(self): pass s =Student("小明" 12 88) print(s) "C:\Program Files\Python38\python3.exe" D:/python/python_210710/exercise_03/str_repr.py <__main__.Student object at 0x000001AFBC055640>

这是什么鬼?<__main__.Student object at 0x000001AFBC055640>,仅仅就知道这是一个Student的对象,它包含什么,其实一点都不知道。

所以为了解决这个问题,特别需要知道的就是__str__()和__repr__()

那下面这样的格式看起来是不是好一点。

python3 str(python3str和repr怎么用看过来了)(2)

这样的格式是不是更好呢?

python3 str(python3str和repr怎么用看过来了)(3)

同样的是打印这个学生对象s,我们就可以很清楚地知道它包含了哪些属性。

怎么用呢?

使用__str__() 或者 __repr__()中的任意一个方法,在定义类中加上这样的转化方式,不需要手动地去print(s.name s.age)这样的方法,我们只需要print(s)就可以看到细节。

很明显,通过上面的演示,__str__的可读性更强,而__repr__的返回结果更具有准确性,更加的适合开发者。

我们在写类的时候,最好至少添加一个__repr__方法,来保证类到字符串的转换具有自定义的有效性。

__str__是可选的,因为在默认情况下,__str__方法默认实现调用的是__repr__方法,所以在对象转字符串时候,找到底层str方法之后,会调用重写的__repr__方法

需要注意的是,如果__str__和__repr__同时存在的时候,__str__的结果会被显示。

python3 str(python3str和repr怎么用看过来了)(4)

同时注意这两个方法的返回必须是字符串,否则会抛出异常。

所以记住了,以后再定义类的时候,初始化函数之后,一定要记得加一个__repr__了。

def __repr__(self): return ("Student(%s %s %s)") % (self.name self.age self.score) return (f"Student({self.name} {self.age} {self.score})")

以上两种方式都可以,你快来试试吧。

python3 str(python3str和repr怎么用看过来了)(5)

猜您喜欢: