python3--__repr_和__str__会返回字符串表达形式
__repr_和__str__会返回字符串表达形式
下一个例子是已经见过的init构造方法和add重载方法,本例也会定义返回实例的字符串表达形式的__repr__方法。字符串格式把self.data对象转换为字符串。如果定义了的话,当类的实例打印或转换成字符申时,__repr__(或其近亲__str__)就会自动调用。这些方法可替对象定义更好的显示格式,而不是使用默认的实例显示。
#!/usr/bin/env python
# -*- coding:utf-8 -*- class adder:
def __init__(self, value = 0):
self.data = value
def __add__(self, other):
self.data += other class addrepr(adder):
def __repr__(self):
return 'addrepr(%s)' % self.data x = addrepr(2)
x + 1
print(x) print(str(x), repr(x))
运行结果:
addrepr(3)
addrepr(3) addrepr(3)
那么,为什么要两个显示方法?概括地讲,是为了进行用户有好的显示,就像print语句和str内置函数一样,会先尝试__str__。__repr__方法从原则上应该放回一个字符串,这个字符串可以作为可执行代码去重建该对象,这是用于交互模式下提示回应以及repr函数。如果__str__不存在,Python会转向__repr__(反过来就不会)。
class addstr(adder):
def __str__(self):
return '[Value: %s]' % self.data x = addstr(3)
x + 1
print(x)
print(str(x), repr(x))
运行结果:
[Value: 4]
[Value: 4] <__main__.addstr object at 0x000000000280A2E8>
正是由干这一点,如果想让所有环境都有统一的显示,__repr__是最佳选择。不过,分别定义这两个方法的话,就可在不同环境内支持不同显示。例如,终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示。
class addboth(adder):
def __str__(self):
return '[Value: %s]' % self.data
def __repr__(self):
return 'addboth(%s)' % self.data x = addboth(4)
x + 1
print(x)
print(str(x), repr(x))
运行结果:
[Value: 5]
[Value: 5] addboth(5)
在实际应用中,除了__init__以外,__str__(或其底层的近亲__repr__)似乎是Python脚本中第二个最常用的运算符重载方法。在任何时候,都可以打印对象而看见定制过的显示的时候,可能就是使用了这两个工具中的一个。
python3--__repr_和__str__会返回字符串表达形式的更多相关文章
- python3笔记九:python数据类型-String字符串
一:学习内容 字符串概念 字符串运算 字符串函数:eval().len().lower().upper().swapcase().capitalize().title().center().ljust ...
- ajax的使用:(ajaxReturn[ajax的返回方法]),(eval返回字符串);分页;第三方类(page.class.php)如何载入;自动加载函数库(functions);session如何防止跳过登录访问(构造函数说明)
一.ajax例子:ajaxReturn("ok","eval")->thinkphp中ajax的返回值的方法,返回参数为ok,返回类型为eval(字符串) ...
- mvc webapi 返回字符串自动加双引号
来自:http://www.cnblogs.com/David-Huang/p/4351023.html 返回字符串,突然碰到双引号号问题,幸亏有人解决了. 返回XMLDocument类型,默认会解析 ...
- 转-C#让枚举返回字符串
下面的手段是使用给枚举项打标签的方式,来返回字符串 下面分别定义一个属性类,和一个枚举帮助类 [AttributeUsage(AttributeTargets.Field,AllowMultiple ...
- SqlSever基础 Upper函数 返回字符串的大写形式
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- SqlSever基础 lower函数 返回字符串的小写形式
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- SpringMVC3的ResponseBody返回字符串(JSON)乱码问题解决
近日做一个小项目,用spring mvc 做到ajax请求获取jquery ztree 异步获取树返回json对象时出现了乱码,试了各种办法,查了各种资料,一开始以为是数据库的编码有问题,经测试没问题 ...
- recurse_array_change_key_case()递规返回字符串键名全为小写或大写的数组
//递归返回字符串键名全为小写或大写的数组function recurse_array_change_key_case(&$input, $case = CASE_LOWER){ if( ...
- Struts2 直接返回字符串(可用于json)
struts2可以在method中直接返回一个字符串而不是视图.让Action中的返回字符串的方法,直接return null;并在return之前用输出流输出字符串就可以了,跟servlet输出HT ...
随机推荐
- Kettle-Spoon入门示例
Spoon 是Kettle的设计调试工具 [Demo文档下载] https://files.cnblogs.com/files/shexunyu/Kettle-Spoon-Demo%E5%B8%AE% ...
- centos6.3下postgresql-9.3安装记录
Xshell for Xmanager Enterprise 4 (Build 0186) Copyright (c) 2002-2011 NetSarang Computer, Inc. All r ...
- Vue.js - Day5 - Webpack
在网页中会引用哪些常见的静态资源? JS .js .jsx .coffee .ts(TypeScript 类 C# 语言) CSS .css .less .sass .scss Images .jpg ...
- uvm_pkg——老板,打包带走
Thus spake the master programmer: “After three day without programming, life becomes meaningless.” 编 ...
- COGS 1578. 次小生成树初级练习题
☆ 输入文件:mst2.in 输出文件:mst2.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 求严格次小生成树 [输入格式] 第一行包含两个整数N 和M,表 ...
- Oracle错误(包括PL/SQL)集合与修复
+-----------------------------------------------------------------------+ | 在本篇随笔中,仅根据个人经验累积错误进行描述 ...
- java 使用htmlunit模拟登录爬取新浪微博页面
mport java.io.IOException;import java.net.MalformedURLException;import com.gargoylesoftware.htmlunit ...
- H5新特性:
新增选择器 document.querySelector.document.querySelectorAll 拖拽释放(Drag and drop) API 媒体播放的 video 和 audio 本 ...
- 如何用node命令和webpack命令传递参数
1. 比如在项目中我们的publicPath需要根据服务器环境的变化而变化,这时我们会写一个配置文件,在webpack.config.js中读取,可以 如何才能 取到变量呢? 这里介绍一种方法: 如果 ...
- java web.xml被文件加载过程及加载顺序小结
web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> ...