关于python类的__repr__()函数

加盾男爵 2016-09-20 05:19:18
python 2.7 + ubuntukylin 14.04

本人看书自学党。。。

关于函数__repr__()函数,书上的解释是“运行是的字符串输出”
然后书上举了个例子,一个类A(功能是接受int类型为参数,转化为string),然后没有重写__repr__()函数
>>>a = A(100)
>>>a
<roundFloat2.RoundFloatManual object at 0x5eff0>
然后我自己写了一个类似的类,并运行了一下

#!/usr/bin/env python
class ShowStr(object):
def __init__(self,Datas):
self.Datas = Datas
def ChangeData(self):
return str(self.Datas)
def __str__(self):
InfoString = self.ChangeData()
return InfoString

TestA = ShowStr(123)
TestA #<---问题所在
print TestA


输出结果是 123
没有任何错误或异常,这个123我觉得是print TestA的输出,我重写了__str__()
但让我纠结的是为什么我代码里有 TestA运行,但系统没有任何信息,没有报错,甚至异常都没有
~~~~华丽的分割线~~~~
然后书上说要使得类运行是有输出功能必须重新实现__repr__()函数
但就对于这个例子来说,只需要添加一行代码
__repr__  =  __str__

即可

然后我找书上的例子,在我的代码中类里面添加了
__repr__  =  __str__

然后再次运行这个脚本的时候,输出结果还是一行“123”
没有任何其他信息,诸如报错,异常之类的,我想问下这个是什么情况?
...全文
1096 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37290726 2017-12-03
  • 打赏
  • 举报
回复
哥哥,你在命令行或者python的IDLE上试试。一个类添加上可输出字符串,加上__repr__和不加__repr__的效果就出来了
sprawling 2016-09-21
  • 打赏
  • 举报
回复
那是在命令行下面会有object信息输出,在run script的时候不会的.

加盾男爵 2016-09-20
  • 打赏
  • 举报
回复
引用 1 楼 sprawling 的回复:
在运行的情况下,TestA是不会输出任何东西的,只有对象,没有方法啊

书上说类的特殊方法(基本定制型)有个__repr__()该函数是直接运行类的实例时候会打印字符串输入。如果没有实现(覆盖)该函数,则运行类的实例时候会出现类似
>>>a = A(100)
>>>a
<roundFloat2.RoundFloatManual object at 0x5eff0> #类似这样的输出,具体信息依赖系统

然后我又重新实现了__repr__(),按书上说的上面我的类重新实现该函数,就可以直接运行类的实例时候有个字符串的输出

书上是这么说的。。。但我既没有看到提示信息(未实现该函数),也没看到字符串输出(已经重新实现该函数)

PS 我看的书是

我python是2.7的,系统是ubuntukylin14.04

sprawling 2016-09-20
  • 打赏
  • 举报
回复
在运行的情况下,TestA是不会输出任何东西的,只有对象,没有方法啊
说明:解压后要注意把文件属性修改一下,解锁即可用 目录表 前言 本书的读者 本书的由来 本书目前的状况 官方网站 约定条款 欢迎给我反馈 值得思考的一些东西 1. 介绍 简介 Python的特色 概括 为什么不使用Perl? 程序员的话 2. 安装Python Linux和BSD用户 Windows®用户 概括 3. 最初的步骤 简介 使用带提示符的解释器 挑选一个编辑器 使用源文件 输出 它如何工作 可执行的Python程序 获取帮助 概括 4. 基本概念 字面意义上的常量 数 字符串 变量 标识符的命名 数据型 对象 输出 它如何工作 逻辑行与物理行 缩进 概括 5. 运算符与表达式 简介 运算符 运算符优先级 计算顺序 结合规律 表达式 使用表达式 概括 6. 控制流 简介 if语句 使用if语句 它如何工作 while语句 使用while语句 for循环 使用for语句 break语句 使用break语句 continue语句 使用continue语句 概括 7. 函数 简介 定义函数 函数形参 使用函数形参 局部变量 使用局部变量 使用global语句 默认参数值 使用默认参数值 关键参数 使用关键参数 return语句 使用字面意义上的语句 DocStrings 使用DocStrings 概括 8. 模块 简介 使用sys模块 字节编译的.pyc文件 from..import语句 模块的__name__ 使用模块的__name__ 制造你自己的模块 创建你自己的模块 from..import dir()函数 使用dir函数 概括 9. 数据结构 简介 列表 对象与的快速入门 使用列表 元组 使用元组 元组与打印语句 字典 使用字典 序列 使用序列 参考 对象与参考 更多字符串的内容 字符串的方法 概括 10. 解决问题——编写一个Python脚本 问题 解决方案 版本一 版本二 版本三 版本四 进一步优化 软件开发过程 概括 11. 面向对象的编程 简介 self 创建一个 对象的方法 使用对象的方法 __init__方法 使用__init__方法 与对象的变量 使用与对象的变量 继承 使用继承 概括 12. 输入/输出 文件 使用文件 储存器 储存与取储存 概括 13. 异常 错误 try..except 处理异常 引发异常 如何引发异常 try..finally 使用finally 概括 14. Python标准库 简介 sys模块 命令行参数 更多sys的内容 os模块 概括 15. 更多Python的内容 特殊的方法 单语句块 列表综合 使用列表综合 在函数中接收元组和列表 lambda形式 使用lambda形式 exec和eval语句 assert语句 repr函数 概括 16. 接下来学习什么? 图形软件 GUI工具概括 探索更多内容 概括 A. 自由/开放源码软件(FLOSS) B. 关于本书 后记 关于作者 关于译者 关于简体中文译本 C. 修订记录 时间表 术语表 表格 5.1 运算符与它们的用法 5.2 运算符优先级 15.1 一些特殊的方法 例子 3.1 使用带提示符的Python解释器 3.2 使用源文件 4.1 使用变量和字面意义上的常量 5.1 使用表达式 6.1 使用if语句 6.2 使用while语句 6.3 使用for语句 6.4 使用break语句 6.5 使用continue语句 7.1 定义函数 7.2 使用函数形参 7.3 使用局部变量 7.4 使用global语句 7.5 使用默认参数值 7.6 使用关键参数 7.7

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧