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 相关文章推荐
Linux环境下MySQL-python安装过程分享
Feb 02 Python
Python进行数据提取的方法总结
Aug 22 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
python读写json文件的简单实现
Apr 11 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
python使用pil库实现图片合成实例代码
Jan 20 Python
Python聊天室程序(基础版)
Apr 01 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
python实现代码审查自动回复消息
Feb 01 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
星际玩家的三大定律
2020/03/04 星际争霸
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
php生成随机密码的几种方法
2011/01/17 PHP
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
Django如何实现上传图片功能
2019/08/16 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
UGG英国官方网站:UGG UK
2018/02/08 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
医药工作岗位求职信分享
2013/12/31 职场文书
学风建设演讲稿
2014/09/12 职场文书
民事赔偿协议书
2014/11/02 职场文书
教师旷工检讨书
2015/08/15 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
Python入门之基础语法详解
2021/05/11 Python
只用Python就可以制作的简单词云
2021/06/07 Python
教你用python实现12306余票查询
2021/06/30 Python
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS