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自动化测试之setUp与tearDown实例
Sep 28 Python
Python中pygame的mouse鼠标事件用法实例
Nov 11 Python
基于python时间处理方法(详解)
Aug 14 Python
python 连接各类主流数据库的实例代码
Jan 30 Python
python中logging包的使用总结
Feb 28 Python
分分钟入门python语言
Mar 20 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
python爬虫获取新浪新闻教学
Dec 23 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
Python 文件数据读写的具体实现
Jan 24 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 04 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实现的贪婪算法实例
2017/10/17 PHP
jquery 分页控件实现代码
2009/11/30 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
Python实现简单的2048小游戏
2021/03/01 Python
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
文化活动实施方案
2014/03/28 职场文书
供货协议书
2014/04/22 职场文书
共青团员自我评价范文
2014/09/14 职场文书
法律进社区活动总结
2015/05/07 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫
Python必备技巧之函数的使用详解
2022/04/04 Python