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 THREADING模块中的JOIN()方法深入理解
Feb 18 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 Python
对python3 urllib包与http包的使用详解
May 10 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
python中单下划线_的常见用法总结
Jul 10 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
Jan 09 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
Python词云的正确实现方法实例
May 08 Python
通过Python把学姐照片做成拼图游戏
Feb 15 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 使用GD库为页面增加水印示例代码
2014/03/24 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
python实现排序算法
2014/02/14 Python
详解Python中for循环的使用方法
2015/05/14 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
python复制文件到指定目录的实例
2018/04/27 Python
Django CBV类的用法详解
2019/07/26 Python
Python 中@property的用法详解
2020/01/15 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
农行心得体会
2014/09/02 职场文书
法人身份证明书
2014/10/08 职场文书
满月酒邀请函
2015/01/30 职场文书
怎样写观后感
2015/06/19 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫