Python|python3|str和repr怎么用?看过来了,这才是真正的使用场景


Python|python3|str和repr怎么用?看过来了,这才是真正的使用场景
文章图片
Python|python3|str和repr怎么用?看过来了,这才是真正的使用场景
文章图片
Python|python3|str和repr怎么用?看过来了,这才是真正的使用场景
无聊的使用案例关于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有什么用呢?他们又是什么呢
使用场景__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__()
那下面这样的格式看起来是不是好一点 。
【Python|python3|str和repr怎么用?看过来了,这才是真正的使用场景】
这样的格式是不是更好呢?
同样的是打印这个学生对象s , 我们就可以很清楚知道它包含了那些属性 。
怎么用呢?使用__str__() 或者 __repr__()中的任意一个方法 , 在定义类中加上这样的转化方式 , 不需要手动地去print(s.names.age)这样的方法 , 我们只需要print(s)就可以看到细节 。
很明显 , 通过上面的演示 , __str__的可读性更强 , 而__repr__的返回结果更具有准确性 , 更加的适合开发者 。
我们在写类的时候 , 最好至少添加一个__repr__方法 , 来保证类到字符串的转换具有自定义的有效性 。
__str__是可选的 , 因为在默认情况下 , __str__方法默认实现调用的是__repr__方法 , 所以在对象转字符串时候 , 找到底层str方法之后 , 会调用重写的__repr__方法
需要注意的是 , 如果__str__和__repr__同时存在的时候 , __str__的结果会被显示 。
同时注意这两个方法的返回必须是字符串 , 否则会抛出异常 。
所以记住了 , 以后再定义类的时候 , 初始化函数之后 , 一定要记得加一个__repr__了 。
def __repr__(self):
   return (\"Student(%s %s %s)\") %  (self.name self.age self.score)
   return (f\"Student({self.name {self.age {self.score)\")

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