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使用爬虫猜密码
Feb 19 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
Python实现批量压缩图片
Jan 25 Python
python3+PyQt5实现拖放功能
Apr 24 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
numpy中loadtxt 的用法详解
Aug 03 Python
python 提取key 为中文的json 串方法
Dec 31 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
PyCharm 安装与使用配置教程(windows,mac通用)
May 12 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
Vue计算属性的使用
2017/08/04 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
[02:19]2018年度DOTA2最佳核心位选手-完美盛典
2018/12/17 DOTA
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
Python学习小技巧总结
2018/06/10 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
python中pop()函数的语法与实例
2020/12/01 Python
Css3圆角边框制作代码
2015/11/18 HTML / CSS
幼师自我鉴定范文
2013/10/01 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
驾驶员培训方案
2014/05/01 职场文书
贫困证明怎么写
2015/06/16 职场文书
爱国电影观后感
2015/06/19 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript
全新239军机修复记
2022/04/05 无线电
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android