面向对象___str__和__repr__
老师的博客关于此知识点 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__的更多相关文章
- 面向对象进阶-类的内置方法 __str__ 、__repr__、__len__、__del__、__call__(三)
# 内置的类方法 和 内置的函数之间有着千丝万缕的联系# 双下方法# obj.__str__ str(obj)# obj.__repr__ repr(obj) # def __str__(self): ...
- 面向对象(__str__和__repr__方法)
#Author : Kelvin #Date : 2019/1/21 16:19 class App: def __init__(self,name): self.name=name # def __ ...
- Python - 面向对象编程 - __repr__()
为什么要讲 __repr__ 在 Python 中,直接 print 一个实例对象,默认是输出这个对象由哪个类创建的对象,以及在内存中的地址(十六进制表示) 假设在开发调试过程中,希望使用 print ...
- python基础-面向对象进阶
一.什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被 ...
- python面向对象一
1.1三种编程方法论 1.面向过程:把复杂的任务一步一步分解成简单的任务. 2.函数式编程:思想上接近于数学运算,根据某种方式,根据方式得出的结果. 3.面向对象编程:一种编程方式,需要使用" ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- Python之路【第六篇】python基础 之面向对象进阶
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 和 issubclass(su ...
- python基础之面向对象高级编程
面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) ...
- day24:面向对象设计与面向对象编程、类和对象
一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...
随机推荐
- SignalR学习笔记(二)高并发应用
虽然SignalR借助Websocket提供了很强大的实时通讯能力,但是在有些实时通讯非常频繁的场景之下,如果使用不当,还是会导致服务器,甚至客户端浏览器崩溃. 以下是一个实时拖拽方块项目的优化过程 ...
- Python爬虫入门教程 6-100 蜂鸟网图片爬取之一
1. 蜂鸟网图片--简介 国庆假日结束了,新的工作又开始了,今天我们继续爬取一个网站,这个网站为 http://image.fengniao.com/ ,蜂鸟一个摄影大牛聚集的地方,本教程请用来学习, ...
- 记一次Eureka启动报Failed to start bean 'eurekaAutoServiceRegistration' 。。。错误
在一次项目迁移的过程中,新导入了两个依赖,结果项目启动就报错,如下: 主要原因是:Failed to start bean 'eurekaAutoServiceRegistration'; neste ...
- leetcode — remove-duplicates-from-sorted-list-ii
/** * Source : https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list-ii/ * * * Given a ...
- scrapy爬虫学习系列三:scrapy部署到scrapyhub上
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- 初识区块链——用JS构建你自己的区块链
前言 区块链太复杂,那我们就讲点简单的.用JS来构建你自己的区块链系统,寥寥几行代码就可以说明区块链的底层数据结构.POW挖矿思想和交易过程等.当然了,真实的场景远远远比这复杂.本文的目的仅限于让大家 ...
- mysql更改数据存储目录
具体操作请参考文章 1.http://blog.csdn.net/aaronbai/article/details/1431190 更改数据存储目录时候会出现 ERROR 2002 (HY000): ...
- 通过 Ansible 安装 Docker
本文的演示环境为 ubuntu 16.04. 先在 Ansible Galaxy 搜索 docker,由 geerlingguy 贡献的 docker role 是目前最受欢迎的: 通过 ansibl ...
- 开源库Magicodes.Storage正式发布
说明 Magicodes.Storage,是心莱科技团队提供的统一存储库,相关库均使用.NET标准库(netstandard2.0)编写,支持.NET Framework以及.NET Core. 我们 ...
- webpack4.0各个击破(2)—— CSS篇
webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习we ...