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 相关文章推荐
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
Python正则表达式和元字符详解
Nov 29 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
Jun 18 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 Python
超简单的Python HTTP服务
Jul 22 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
Python基于Tensor FLow的图像处理操作详解
Jan 15 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Python 连接 MySQL 的几种方法
Sep 09 Python
Python下opencv库的安装过程及问题汇总
Jun 11 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数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
javascript知识点收藏
2007/02/22 Javascript
不错的JS中变量相关的细节分析
2007/08/13 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
Python中的asyncio代码详解
2019/06/10 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
什么是python的列表推导式
2020/05/26 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
文明旅游倡议书
2015/04/28 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技