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中 Lambda表达式全面解析
Nov 28 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
python实现机器学习之多元线性回归
Sep 06 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
使用Python制作一个打字训练小工具
Oct 01 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
使用Tkinter制作信息提示框
Feb 18 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Python3如何在服务器打印资产信息
Aug 27 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
Python利用folium实现地图可视化
May 23 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 extract 将数组拆分成多个变量的函数
2010/06/30 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
在HTML文档中嵌入JavaScript的四种方法
2018/05/07 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
python dict remove数组删除(del,pop)
2013/03/24 Python
python使用post提交数据到远程url的方法
2015/04/29 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
Python发展简史 Python来历
2019/05/14 Python
PyQt5响应回车事件的方法
2019/06/25 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
《鲁班和橹板》教学反思
2014/04/27 职场文书
政治学求职信
2014/06/03 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
被告答辩状范文
2015/05/22 职场文书
家长意见书
2015/06/04 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript