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 FTP操作类代码分享
May 13 Python
python通过装饰器检查函数参数数据类型的方法
Mar 13 Python
详解Python发送邮件实例
Jan 10 Python
Python实现App自动签到领取积分功能
Sep 29 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
对django的User模型和四种扩展/重写方法小结
Aug 17 Python
python解释器spython使用及原理解析
Aug 24 Python
python-web根据元素属性进行定位的方法
Dec 13 Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 Python
python 装饰器的基本使用
Jan 13 Python
python如何进行基准测试
Apr 26 Python
Python 数据可视化之Seaborn详解
Nov 02 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伪静态的实现详细介绍
2013/04/28 PHP
php 如何获取数组第一个值
2013/08/06 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
PHP错误处理函数
2016/04/03 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
详解在Python和IPython中使用Docker
2015/04/28 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Django实现自定义404,500页面教程
2017/03/26 Python
python实现堆排序的实例讲解
2020/02/21 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
五一家具促销方案
2014/01/10 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书