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有什么用呢?他们又是什么呢?
使用场景__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__()
那下面这样的格式看起来是不是好一点。
这样的格式是不是更好呢?
同样的是打印这个学生对象s,我们就可以很清楚地知道它包含了哪些属性。
怎么用呢?使用__str__() 或者 __repr__()中的任意一个方法,在定义类中加上这样的转化方式,不需要手动地去print(s.name s.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})")
以上两种方式都可以,你快来试试吧。