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 ...
随机推荐
- Glide图片框架
//加载圆形图片Glide.with(this).load(WSCAppStatic.WEB_KEFU_PHOTO_URL+ "?usercode=8120000315") .as ...
- 修改nagios登录界面密码
htpasswd -c /usr/local/nagios/etc/htpasswd.user nagiosadmin 输入密码: 重启httpd服务.
- nmon各配置项含义介绍
1)nmon各配置项含义介绍
- HTML iframe框架
iframe 作用: 就是在一个网页插入一个小窗口 窗口里面也是一个网页 <a href="http://www.baidu.com" target="da1& ...
- 远程linux服务器mysql数据库定期备份和删除
网上已经有部分关于Linux下定期备份mysql的方法,但是很多步骤不够详细,不适合新手,自己琢磨了很久,终于搞定了. 1.Linux服务器一般是ssh协议,如果本地也是Linux环境,可以直接通过s ...
- elasticsearch更新操作问题
elasticsearch在更新的时候,是通过id进行管理的,我们在前台传入id操作,id如果与elasticsearch相同,则覆盖,否则新增一条记录.且elasticsearch中的插入一条记录和 ...
- Gym 100342E Minima (暴力,单调队列)
3e7暴力,800ms+过,单调队列维护区间最小值. #include<bits/stdc++.h> using namespace std; typedef long long ll; ...
- 设置与使用SQL Server的字符集(Collation,即排序规则)
目录 目录 正确认识SQL Server的字符集 选择合适的SQL Server字符集 错误使用SQL Server的字符集 参考资料 正确认识SQL Server的字符集 SQL Server作为一 ...
- python爬虫---实现项目(四) 用BeautifulSoup分析新浪新闻数据
这次只演示了,如何在真实项目内用到BeautifulSoup库来解析网页,而新浪的新闻是ajax加载过来的数据,在这里我们只演示解析部分数据(具体反扒机制没做分析). 代码地址:https://git ...
- syslog(),closelog()与openlog()--日志操作函数 (1)
文章出处:http://blog.csdn.net/xx77009833/archive/2010/07/30/5776383.aspx 为了满足某些目的,进行日志记录是很有必要的. 在典型的 LIN ...