__str__和__repr__
如果要把一个类的实例变成 str,就需要实现特殊方法__str__():
不使用 __str__  ,print打印出来是个对象;使用了就把对象变成字符串class Person(object):def __init__(self, name, gender):self.name = nameself.gender = genderdef __str__(self):return '(Person: %s, %s)' % (self.name, self.gender)
现在,在交互式命令行下用 print 试试:>>> p = Person('Bob', 'male')
>>> print p
(Person: Bob, male)
但是,如果直接敲变量 p:>>> p
<main.Person object at 0x10c941890>
似乎__str__() 不会被调用。因为 Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。有一个偷懒的定义__repr__的方法:class Person(object):def __init__(self, name, gender):self.name = nameself.gender = genderdef __str__(self):return '(Person: %s, %s)' % (self.name, self.gender)__repr__ = __str__
class Cat:"""定义了一个Cat类"""#初始化对象def __init__(self, new_name, new_age):self.name = new_nameself.age = new_agedef __str__(self):return "%s的年龄是:%d"%(self.name, self.age)#方法def eat(self):print("猫在吃鱼....")def drink(self):print("猫正在喝kele.....")def introduce(self):print("%s的年龄是:%d"%(self.name, self.age))#创建一个对象
tom = Cat("汤姆", 40)lanmao = Cat("蓝猫", 10)print(tom)
print(lanmao)

运行结果:

汤姆的年龄是:40
蓝猫的年龄是:10

版权声明:文章如若有错,望能指出。 https://blog.csdn.net/luckytanggu/article/details/53649156

看下面的例子就明白了

class Test(object):def __init__(self, value='hello, world!'):self.data = value>>> t = Test()
>>> t
<__main__.Test at 0x7fa91c307190>
>>> print t
<__main__.Test object at 0x7fa91c307190># 看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址
# 下面我们重构下该类的__repr__以及__str__,看看它们俩有啥区别# 重构__repr__
class TestRepr(Test):def __repr__(self):return 'TestRepr(%s)' % self.data>>> tr = TestRepr()
>>> tr
TestRepr(hello, world!)
>>> print tr
TestRepr(hello, world!)# 重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了# 重构__str__
calss TestStr(Test):def __str__(self):return '[Value: %s]' % self.data>>> ts = TestStr()
>>> ts
<__main__.TestStr at 0x7fa91c314e50>
>>> print ts
[Value: hello, world!]# 你会发现,直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了

__repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员。

  • 打印操作会首先尝试__str__和str内置函数(print运行的内部等价形式),它通常应该返回一个友好的显示。

  • __repr__用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用__str__,会使用print和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。

当我们想所有环境下都统一显示的话,可以重构__repr__方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示,实际上__str__只是覆盖了__repr__以得到更友好的用户显示。

Python中__str__的用法相关推荐

  1. 五分钟理解yield在python中的简单用法,让你不再迷惑

    很多同学无论是在学习python还是使用python的过程中,都会遇到yield关键字,这个让人头大的问题,今天,就给大家分享一下我自学yield的心路历程 基本概念: (1)在 Python 中,使 ...

  2. format函数python的顺序_[转载] Python中format函数用法

    Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能 ...

  3. python代码大全表解释-python中的字典用法大全的代码

    如下代码是关于python中的字典用法大全的代码. #!/usr/bin/env python # # [SNIPPET_NAME: Dictionaries 101] # [SNIPPET_CATE ...

  4. python教程实例-Python中函数的用法实例教程

    本文以数值计算为例讲述了Python中函数的用法,分享给大家供大家参考借鉴之用.具体如下: 我们都知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需 ...

  5. 详解python中的用法_详解python中*号的用法

    1.表示乘号 2.表示倍数,例如: def T(msg,time=1): print((msg+' ')*time) T('hi',3) 打印结果(打印3次): hi hi hi 3.单个 * (1) ...

  6. python中 str.strip()用法

    python中 str.strip()用法 1.描述 str.strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. (即可以去除特殊字符串) 注意:该方法只能删除开头或是 ...

  7. Python中的del用法

    python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题. python的del不同于C的free和C++的delete. 由于pyth ...

  8. python中的super用法详解_【Python】【类】super用法详解

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...

  9. python中argv的用法

    python中argv的用法 sys.argv可以用来获取命令行参数,其中sys.argv[0]为脚本名,即python文件名,列表中的其他值为传入的参数值,一般定义方式为 script, arg1, ...

最新文章

  1. 从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数
  2. CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解
  3. 新概念英语2电子版_新概念英语读100遍,英语能超神
  4. 考研调剂 计算机科学 软件,2020年四川大学计算机学院(软件学院)考研调剂信息...
  5. 计算机课题立项申报书范文,课题立项申请书怎么写
  6. 在使用firefly的RK3308的SDK使用buildroot构造文件系统时,遇到OEM分区和userdata不能挂在成功的问题
  7. matlab canon,Canonical state-space realization
  8. BadBoy乱码处理
  9. 99%的人看了它都会说这是一篇很全的tomcat服务❤️❤️[⭐建议收藏⭐]
  10. 移动小工具——利用python进行综合调度班的区县信息处理
  11. 【web项目】前端生日礼物--clock篇
  12. linux新建磁盘分区
  13. 机器学习-8(单调函数)
  14. glade 使用指南(1)
  15. 寻找二值图像连通域的算法分析
  16. Dr.Elephant简介
  17. maple 2018 窗口关闭提示乱码_GRF中野再次实锤加盟LNG!韩媒爆料:Maple或去北美赛区养老...
  18. SharePreference保存list
  19. WinPE中工具ImageX工具用法
  20. JavaScript七大继承解析

热门文章

  1. iOS开发 判断输入语言是否是汉语
  2. 22web app实现左右滑动控制菜单
  3. 如何使用Access创建一个简单MIS管理系统_Access
  4. 高低压开关柜无线测温系统的功能与应用——安科瑞 严新亚
  5. 计算机网络重要知识点总结(期末复习笔记)
  6. 【Unity】【PC】【错误上报】Bug上报插件 Trello Bug Tracker 使用介绍 (一):用户上报部分
  7. cocoscreator html5,Cocos Creator H5支持剪贴板复制功能
  8. 前端项目中使用js-beautify格式化、美化js代码
  9. 建立标准编码规则(二)-DiagnosticAnalyzer 增加诊断分析代码
  10. 联接无止境!500万台AP潜在大数据流量入口