python 自定义对象的打印方法


Posted in Python onJanuary 12, 2019

在python中,如果不重写自定义对象的__str__方法,打印出来的对象是一串类似于<__main__.Bean object at 0x1007da470>的字符串。这当然不是我们想要的结果。

于是:通过对__str__方法的重写,就可以返回我们想要的数据的展示。

但是,一个新的问题出现了。以后,如果要修改这个类的属性,那么要想正确的显示对象的属性。还得修改__str__方法。

有没有办法可以做到动态显示所有的属性呢?

当然是有的。

通过对对象的属性的收集,就可以实现动态的打印全部的属性。而且,更方便的是,我们可以将这种方法做成一个工具类。以后,自定义只需要继承该类,就可以实现对象的属性的完成打印了。ps:Python是支持多继承的,所以,继承该类实现格式化打印,并不影响原有逻辑。

看如下代码是如何实现对类属性的动态收集并打印的。

class AttrDisplay:
  def gatherAttrs(self):
    return ",".join("{}={}"
            .format(k, getattr(self, k))
            for k in self.__dict__.keys())
    # attrs = []
    # for k in self.__dict__.keys():
    #   item = "{}={}".format(k, getattr(self, k))
    #   attrs.append(item)
    # return attrs
    # for k in self.__dict__.keys():
    #   attrs.append(str(k) + "=" + str(self.__dict__[k]))
    # return ",".join(attrs) if len(attrs) else 'no attr'

  def __str__(self):
    return "[{}:{}]".format(self.__class__.__name__, self.gatherAttrs())

OK,似乎所有的工作都已经完成了,来简单测试一下吧:

class Bean(AttrDisplay):
  def __init__(self, id=1024, name='Jack Chen', job='Actor'):
    self.id = id
    self.name = name
    self.job = job

  def doSomething(self):
    return self.name + " doing something now ..."


if __name__ == '__main__':
  bob = Bean()
  print(bob)
# [Bean:id=1024,name=Jack Chen,job=Actor]

嗯,测试结果似乎和我们预期的一致。所以,这样就实现对自定义对象的打印。

以上这篇python 自定义对象的打印方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
Python扩展内置类型详解
Mar 26 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
选择python进行数据分析的理由和优势
Jun 25 Python
Pytorch释放显存占用方式
Jan 13 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
python hmac模块验证客户端的合法性
Nov 07 Python
python中entry用法讲解
Dec 04 Python
python实现批量移动文件
Apr 05 Python
全网非常详细的pytest配置文件
Jul 15 Python
python设定并获取socket超时时间的方法
Jan 12 #Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 #Python
Python构建图像分类识别器的方法
Jan 12 #Python
使用python opencv对目录下图片进行去重的方法
Jan 12 #Python
python变量赋值方法(可变与不可变)
Jan 12 #Python
python交换两个变量的值方法
Jan 12 #Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 #Python
You might like
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
asm.js使用示例代码
2013/11/28 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
详解webpack babel的配置
2018/01/09 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
以一段代码为实例快速入门Python2.7
2015/03/31 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
Python气泡提示与标签的实现
2020/04/01 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
物业管理求职自荐信
2013/09/25 职场文书
建筑工地大门标语
2014/06/18 职场文书
公民授权委托书
2014/10/15 职场文书
实习感想范文
2015/08/10 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技