老师的博客关于此知识点 http://www.cnblogs.com/Eva-J/articles/7351812.html#_label7

__str__和__repr__

改变对象的字符串显示__str__,__repr__

先来看一段代码

class Course:
belong_to='old boy'
def __init__(self,name,number,site,teacher):
self.name=name
self.number=number
self.site=site
self.teacher=teacher
def __str__(self):
print('我执行了__str__')
return '好像写重复了,不管了,我执行了__str__方法' \
'申明一下我的返回值 必须是字符串的类型'
def __repr__(self):
print('我执行了__repr__操作')
return '我是__repr__的返回值,我的返回值也必须是str类型'
def fun(self):
print('我就是是个弟弟,func功能而已')
python =Course('python',92,'张家界','alex')
print(python)#直接打印对象时,如果类的里面有__str__方法时,会调用__str__方法,并且返回return的值
# 此时调用的是Course里的__str__的方法
num= 1
print(num)#此时调用的是int 中的__str__方法
'''输出结果我执行了__str__
好像写重复了,不管了,我执行了__str__方法申明一下我的返回值 必须是字符串的类型
1'''

注意事项和解释写在代码里面了

接着上面的代码

print('我是测试的下面是内容:\n%s'%python)
'''

我执行了__str__
我是测试的下面是内容:
好像写重复了,不管了,我执行了__str__方法申明一下我的返回值 必须是字符串的类型

'''

以上可见,当print是如果里面有%s,%对象名时,也执行了__str__的方法,并且接受了其返回值,并打印了出来

同样,接着上面的的代码,来看如下:


print(str(python))
'''输出结果我执行了__str__ 
好像写重复了,不管了,我执行了__str__方法申明一下我的返回值 必须是字符串的类型'''

再来看如下代码

print('%r'%python)
print(repr(python))
'''输出结果:我执行了__repr__操作
我是__repr__的返回值,我的返回值也必须是str类型
我执行了__repr__操作
我是__repr__的返回值,我的返回值也必须是str类型
'''

同理此时也是调用了对象中的__str__方法,并接受打印了返回值

总结一下:当一个类,对象中有__str__方法时,当print是有3中情况会调用__str__,并接受和打印其返回值

  1.直接打印对象时 print(对象)

  2.打印是有%s时,并且表明%s就是object(对象)时。print('内容%r)%对象,有点像格式化输出

  3.print(str(对象))

执行__repr__时候

  1.print(‘%r’%对象)

  2.3.print(repr(对象))

__str__与__repr__的返回值必需是字符串的形式

值得注意的是,当没有__str__,但有__repr__时,__repr__变充当了__str__的角色,执行__repr__方法,并接受其返回值,打印出来

print(obj)/'%s'%obj/str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有,那么他返回的必定是一个字符串
如果没有__str__方法,会先找本类中的__repr__方法,再没有再找父类中的__str__。
repr(),只会找__repr__,如果没有找父类的

面向对象___str__和__repr__的更多相关文章

  1. 面向对象进阶-类的内置方法 __str__ 、__repr__、__len__、__del__、__call__(三)

    # 内置的类方法 和 内置的函数之间有着千丝万缕的联系# 双下方法# obj.__str__ str(obj)# obj.__repr__ repr(obj) # def __str__(self): ...

  2. 面向对象(__str__和__repr__方法)

    #Author : Kelvin #Date : 2019/1/21 16:19 class App: def __init__(self,name): self.name=name # def __ ...

  3. Python - 面向对象编程 - __repr__()

    为什么要讲 __repr__ 在 Python 中,直接 print 一个实例对象,默认是输出这个对象由哪个类创建的对象,以及在内存中的地址(十六进制表示) 假设在开发调试过程中,希望使用 print ...

  4. python基础-面向对象进阶

    一.什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被 ...

  5. python面向对象一

    1.1三种编程方法论 1.面向过程:把复杂的任务一步一步分解成简单的任务. 2.函数式编程:思想上接近于数学运算,根据某种方式,根据方式得出的结果. 3.面向对象编程:一种编程方式,需要使用" ...

  6. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  7. Python之路【第六篇】python基础 之面向对象进阶

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象  和  issubclass(su ...

  8. python基础之面向对象高级编程

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) ...

  9. day24:面向对象设计与面向对象编程、类和对象

    一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...

随机推荐

  1. 【Docker】(4)搭建私有镜像仓库

    [Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先 ...

  2. Import Excel void (NPOI)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. spring cloud + .net core实现微服务架构

    1.新建spring boot项目 2.添加spring-cloud-starter-eureka-server依赖(需提供版本信息) <!-- https://mvnrepository.co ...

  4. Python爬虫入门教程 28-100 虎嗅网文章数据抓取 pyspider

    1. 虎嗅网文章数据----写在前面 今天继续使用pyspider爬取数据,很不幸,虎嗅资讯网被我选中了,网址为 https://www.huxiu.com/ 爬的就是它的资讯频道,本文章仅供学习交流 ...

  5. APK安装成功后点击"打开",按Home键,在桌面点击图标后应用重启

    转载:http://blog.csdn.net/kepoon/article/details/7468688 问题: 安装系统SD卡里面的apk或者原有的程序更新版本的时候,会遇到升级安装成功之后的一 ...

  6. python:pip命令使用

    pip命令安装库  pip install 库名 使用pip命令更新库 pip install --upgrade 库名 比如更新scikit-learn包 pip install --upgrade ...

  7. SpringMVC中@Controller和@RequestMapping用法和其他常用注解

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  8. angularjs1.X进阶笔记(3)——如何重构controller

    目录 一. 结构拆分 二.基本代码优化 本篇是内部培训交流会的摘要总结. 培训PPT和示例代码已托管至我的github仓库: https://github.com/dashnowords/blogs/ ...

  9. .Net Excel 导出图表Demo(柱状图,多标签页)

    1 使用插件名称Epplus,多个Sheet页数据应用,Demo为柱状图(Epplus支持多种图表) 2 Epplus 的安装和引用 新建一个工程文件或控制台应用程序 打开 Vs2017 Tools  ...

  10. Java开发笔记(七十二)Java8新增的流式处理

    通过前面几篇文章的学习,大家应能掌握几种容器类型的常见用法,对于简单的增删改和遍历操作,各容器实例都提供了相应的处理方法,对于实际开发中频繁使用的清单List,还能利用Arrays工具的asList方 ...