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实现将元祖转换成数组的方法
May 04 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
python爬取内容存入Excel实例
Feb 20 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
Python列表list常用内建函数实例小结
Oct 22 Python
Python 中 -m 的典型用法、原理解析与发展演变
Nov 11 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
简单的命令查看安装的python版本号
Aug 28 Python
Windows安装Anaconda3的方法及使用过程详解
Jun 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
js实现新浪微博首页效果
2015/10/16 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
Python3最长回文子串算法示例
2019/03/04 Python
详解python中sort排序使用
2019/03/23 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
Java中实现多态的机制
2015/08/09 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
技术总监岗位职责
2013/12/05 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
交通事故协议书范文
2014/04/16 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript