一、 引言

上节结合案例介绍了重写__repr__方法的关注点,重写__repr__方法的要点是要准确的输出开发人员关注的信息,并便于开发人员使用相关信息。而__str__方法是为最终用户返回类的相关信息,因此需要相关信息容易理解,更需要开发者在自定义类的过程中重写__str__方法。

object类提供的__str__方法,只是简单输出模块名、类名以及对象的ID信息,老猿认为实际上就是在__str__方法直接调用object类的__repr__方法,不过没去研究代码核实。不管怎样,这个信息根本谈不上用户友好度,因此老猿建议对于重要的与客户交互的类重写类的__str__方法。

二、 重写__str__方法

重写__str__方法注意:

  1. __str__方法是实例方法,因此带一个参数self,也只能带这个参数;
  2. 输出的信息尽可能容易让客户理解;
  3. 可以调用父类的__str__方法,也可以不调用,具体需要根据父类输出信息的情况进行评估是否满足客户友好性。不过老猿建议最好调用,如果父类友好性不够建议修改父类的__str__方法。

    注意:如果类内未重写__str__方法,但重写了__repr__方法了,则调用__str__方法时Python会直接调用__repr__方法。

三、 例子

  1. 例子说明

    本节继续利用上节的Car类来说明__str__方法重写,在类中重写了__repr__方法和__str__方法,__repr__方法重写是用的上节的内容,__str__方法重写返回的信息包括:

    1>证明调用了重写方法的“In str:”提示;

    2>使用中文描述的属性名称,以及对应值。

    另外在信息查看时,特地调用直接查看对象和打印对象查看输出,看看是否与上节的例子输出不同。

  2. 案例代码

    1> 类定义

class Car():
def __init__(self,brand,type,color,weight,oilcostper100km): #构造方法
self.brand = brand
self.type = type
self.oilcostper100km = oilcostper100km
self.color = color
self.weight = weight def __repr__(self):
s="In __repr__:\n <{} object at {:#016x}>\n".format(repr(self.__class__),id(self) )#使用类相关的信息输出类名和实例ID
s+=super().__repr__() #直接调用object.__repr__方法输出类信息和实例ID
#通过实例的self.__dict__获取实例的详细属性信息,注意使用了repr函数去获取字典信息字符串
s+='\n'+repr(self.__dict__)
return s def __str__(self):
return "In __str__:\n 实例属性:{} {},车身颜色{}、车重{}吨、百公里油耗{}升".\
format(self.brand,self.type,self.color,self.weight,self.oilcostper100km)

2>实例定义及查看信息()

car = Car('雪佛兰','科帕奇','白色',1.8,10)
car #查看实例信息,此时会调用__repr__方法
print(car) #查看实例信息,此时会调用__str__方法,但没有重写__str__方法,效果会怎样?
  1. 案例截图

  2. 案例总结

    通过上述案例说明:

    1>重写__str__方法后,使用print(对象)查看对象会触发重写方法的调用,其他触发方式请见《第8.14节 Python类中内置方法的__str__详解》,在此不再展开说明;

    2>结合上节的案例一起,这2个案例验证了上节所说明的“自定义类没有重写__str__方法的情况下,Python会直接调用__ repr __方法输出,要输出单独的__str__信息需要重写__str__方法”。

本节结合案例介绍了 __str__方法的重写,可以看到通过重写该方法如果输出数据得当,相关信息有利于最终用户理解。

老猿Python,跟老猿学Python! 博客地址:https://blog.csdn.net/LaoYuanPython

最新文章

  1. Java将TXT上的数据转换成excel里面
  2. acvity和fragment通过广播联系
  3. various Sequence to Sequence Model
  4. js中的换算小技巧
  5. unity3D与网页的交互---做项目的一点总结
  6. 深入理解js——继承
  7. Linux 命令之 grep
  8. Centos6.5(final)安装gcc和g++,python以及导致问题的解决方法
  9. Debian 7 安装Firefox
  10. (三)phpcms之文件目录
  11. 习题3.4 &amp; 3.5: 求两链表的交集和并集
  12. 七天来学习ASP.NET MVC (两)——ASP.NET MVC 数据传输
  13. Swift资料大全
  14. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) 解决方案
  15. FTP&amp;samba 服务简单部署
  16. 【Python】 用户图形界面GUI wxpython III 更多组件
  17. C#语言————第三章 使用属性升级MyBank
  18. (C/C++学习笔记) 四. 运算符
  19. ylz 开发学习笔记一(注意事项)
  20. winform窗体 小程序【打开多个窗体、窗体之间传值、打开唯一窗体】

热门文章

  1. c#三角形
  2. leetcode4:sort-list
  3. 依赖注入DI(IOC)容器快速入门
  4. 微信支付特约商户进件中base64格式图片上传
  5. mingw32环境下链接库找不到问题
  6. Linux杂谈: 实现一种简单实用的线程池(C语言)
  7. tcpack--4延时ack
  8. 剑指offer刷题(算法类_2)
  9. TCC事务原理
  10. flink1.10版local模式提交job流程分析