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原始字符串(raw strings)用法实例
Oct 13 Python
python抓取百度首页的方法
May 19 Python
python自动翻译实现方法
May 28 Python
python处理html转义字符的方法详解
Jul 01 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 Python
matplotlib中legend位置调整解析
Dec 19 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 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函数
2006/12/06 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
Python实现简单的可逆加密程序实例
2015/03/05 Python
Python实现的rsa加密算法详解
2018/01/24 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
信息系统专业个人求职信范文
2013/12/07 职场文书
电子专业自荐信
2014/07/01 职场文书
解除同居协议书
2015/01/29 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
公司会议开幕词
2016/03/03 职场文书
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers