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实现备份文件实例
Sep 16 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
Python实现对字符串的加密解密方法示例
Apr 29 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
Python实现感知机(PLA)算法
Dec 20 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
Python骚操作之动态定义函数
Mar 26 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
python 调整图片亮度的示例
Dec 03 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实现下载功能的代码
2012/09/29 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
express 项目分层实践详解
2018/12/10 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
Pytorch之contiguous的用法
2019/12/31 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
酒店总经理欢迎词
2014/01/08 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python