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中的身份运算符的使用方法
Oct 13 Python
python使用opencv读取图片的实例
Aug 17 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
python爬虫之urllib3的使用示例
Jul 09 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
Python Pandas知识点之缺失值处理详解
May 11 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
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
详解Django中的过滤器
2015/07/16 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
日本小田急百货官网:Odakyu
2018/07/19 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
建筑结构施工专业推荐信
2014/02/21 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
课外活动总结范文
2014/07/09 职场文书
临时用工协议书范本
2014/10/29 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫