文章图片
文章图片
无聊的使用案例关于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)\")
以上两种方式都可以 , 你快来试试吧 。
- Python|呼吁理性消费:不足千元买27寸IPS 165hz 旋转升降电竞显示器
- Python|专业输出文本化表格的Python库,太漂亮了!
- Python|通话质量好的有哪几款推荐?通话质量好的蓝牙耳机推荐
- Python|又一电商巨头凉凉?市值跌去90%,付款后不发货,申请退款不受理
- 超导|Astra公司终于成功完成首次入轨测试
- Python|小米MIX FOLD的用户超过一半来源于H和A品牌!小米高端成了
- Python|中国电子商务股第三季度业绩下滑 京东成唯一赢家
- Python|英特尔i7-12700几乎持平AMD 5900X,售价仅2399元
- 数据库|原来这才是Python连接mysql数据库的正确姿势!(一)
- Python|关于高刷显示屏