repr(specia)

无聊的使用案例

关于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.pyCHINACHINA'CHINA'

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

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

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): passs =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__()

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

repr

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

repr

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

怎么用呢?

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

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

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

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

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

repr

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

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

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

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

repr

repr 

相关文章