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随机生成带特殊字符的密码
Mar 02 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
Pandas 解决dataframe的一列进行向下顺移问题
Dec 27 Python
Pytest mark使用实例及原理解析
Feb 22 Python
python微信公众号开发简单流程实现
Mar 09 Python
Django CBV模型源码运行流程详解
Aug 17 Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 Python
python简单验证码识别的实现过程
Jun 20 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 session劫持和防范的方法
2013/11/12 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
canvas学习之API整理笔记(一)
2016/12/29 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
python实现黑客字幕雨效果
2018/06/21 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
python+django+rest框架配置创建方法
2019/08/31 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
实习生单位鉴定意见
2013/12/04 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
高中生班主任评语
2014/04/25 职场文书
英语故事演讲稿
2014/04/29 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
计算机系本科生求职信
2014/05/31 职场文书
铁路安全反思材料
2014/12/24 职场文书
回复函格式及范文
2015/07/14 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js