原标题:Python打印对象的全部属性

__dict__方法

遇到这样一个情况,要打印出一个对象的各种属性。但是不同对象的属性名都不一样,结构也不同,无法写一个代码来实现。然后我找到了__dict__,使用这个属性,可以动态获取到对象的所有属性,不包括公用属性。

通过__dict__,就可以动态的获取到对象的全部属性。获得的是一个字典,属性名是字典的key,属性值是字典的value。从输出看,私有属性也可以获得,只是不包括公有属性。

然后,如果只想要属性值的话,可以对字典再加工。复习一下字典的3个方法:

dict.items() :用元祖来存放key和vlaue

dict.keys() : 只包含key

dict.values() : 只包含value

上面3个方法返回的都是一个可迭代对象,可以用for遍历,但不是迭代器,不能用next方法。

然后用下面的方法打印

最后拆分一下打印的时候用到的方法

a = dict1.items() 这个是可迭代对象,可以用for遍历

b = (%s:%s%item for item in a) 用for循环遍历a,每一项是个元祖,把元祖转成%s:%s的字符串形式。最外面的( )就是转成一个迭代器。也可以用[ ],转成列表。

c = ‘\n’.join(b) 最后用join()方法完成字符串的拼接

__str__方法

又发现一个更好用的方法,并且可以获取到公有属性了。__str__方法是在打印这个对象的时候,不再打印对象的内存地址,而是打印__str__方法的返回值:

这里要注意,返回值必须是字符串,所以得传一个数据类型

return .join(str(item) for item in (self.display,self.name,self.age,self.course,self.__salary)) 这个也可以这么写

return %s %s %s %s %s%(self.display,self.name,self.age,self.course,self.__salary) 这么写虽然好理解,但是前面的%s的数量必须和后面的变量一致,如果要加1个或减1个变量,前后都得改。

__str__方法可以完全自定义自己对象的输出格式,既然是自定义的方法,那么还可以加上参数控制。但是调用的时候似乎并没有地方填参数。

其实是在print调用对象的时候,系统已经帮我们自动将print指向了__str__方法,也就是说 print(t1) 其实执行的是 print(t1.__str__()) ,这个时候我们就可以自己写全,然后加上参数。

其实这里并没不是打印了所有的属性,而是我们自定义了打印内容。但是自定义的位置是在类中的,这个位置是可以获取到全部属性的。

终极方法

其实就是把上面2个方法一起用。其实有上面2个方法应该就可以了,不过既然都搞明白了,留个记录也好。

先提一个点,在定义了__str__方法后,虽然打印出来是字符串,但是在其他时候传的值还是对象。如果想获取就是打印的值而不是对象,那么还是用对象__str__() 来传递,下面就是最终的例子:

责任编辑:

python类的属性和对象属性_Python打印对象的全部属性相关推荐

  1. python打印对象地址_Python打印对象的全部属性

    __dict__方法 遇到这样一个情况,要打印出一个对象的各种属性.但是不同对象的属性名都不一样,结构也不同,无法写一个代码来实现.然后我找到了__dict__,使用这个属性,可以动态获取到对象的所有 ...

  2. python类的方法三种访问权_Python基础33-面向对象(继承资源(属性与方法)的使用注意)...

    在Python中, 继承是指子类对父类资源的使用权 1 继承-属性与方法的使用权限 1.1 测试属性与方法分别如下 公有属性/方法 受保护属性/方法 私有属性/方法 class Animal: a = ...

  3. python是一种面相什么语言_Python面相对象编程的知识总结

    1.类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法,对象是类的实例. 2.类变量:类变量在整个实例化的对象中是公用的,类变量定义在类中且在函数 ...

  4. python类的析构方法是什么_python类的析构方法是什么_python类析构

    python __del__ 转自:http://blog.csdn.net/bbdxf/article/details/25774763 最近学习<Python参考手册>学到Class部 ...

  5. python类的封装是什么意思_python封装是什么意思

    python封装是什么意思 发布时间:2020-09-21 09:17:42 来源:亿速云 阅读:97 作者:Leah python封装是什么意思?相信很多没有经验的人对此束手无策,为此本文总结了问题 ...

  6. python列表是可变对象吗_Python可变对象和不可变对象

    Python中一切皆对象,每个对象都有其唯一的id,对应的类型和值,其中id指的是对象在内存中的位置.根据对象的值是否可修改分为可变对象和不可变对象.其中, 不可对象包括:数字,字符串,tuple 可 ...

  7. python中元组的值可变吗_python中对象的可变与不可变

    在python中一切皆对象,对象是对数据的抽象. 所有对象有三个要素:类型.标识.值.类型决定对象可以支持哪些操作:标识指的是对象的内存地址,每个对象有唯一的地址,通过id内建函数可以求出地址:值从字 ...

  8. python类的成员没有访问控制限制_Python 访问限制 private public的详细介绍

    一.知识点 在一个模块中,我们可能会定义很多函数和变量.但有的函数和变量我们希望能给别人使用,有的函数和变量我们希望仅仅在模块内部使用,so? 我们可以通过定义该函数.变量是公开的还是私有的来达到该目 ...

  9. python类的使用的生物学应用_python类的使用的生物学应用_Python 类的使用

    类的使用 文档化函数: 在函数的开头写下字符串,它会作为函数的一部分运行存储,这称为文档字符串(常用来描述该函数的信息). 如下: def test(x,y): u""" ...

最新文章

  1. 内核级HOOK的几种实现与应用
  2. 如何阅读苹果开发文档
  3. 【转】Kettle集群
  4. mockito_Mockito和Hamcrest的试驾制造商
  5. CSS如何让DIV的宽度随内容的变化
  6. cdr图片随意拉伸变形_如何操作才能使照片拉伸不变形
  7. 为什么说GraphQL可以取代REST API?
  8. 《我也能做CTO之程序员职业规划》之四:直线定律
  9. 手把手教你申请Coursera的课程助学金
  10. 【渝粤题库】陕西师范大学200591 英语语法
  11. 图书馆占座系统(五)
  12. 架构系列---发号器(全局唯一ID生成器)系统设计方案和思路
  13. wampserver下载以及安装教程
  14. 《牧畜王国的兴衰》序
  15. Zero-Shot Learning学习笔记 -- CVPR_2022_MSDN: Mutually Semantic Distillation Network for Zero-Shot Learn
  16. 合肥工业大学宣城java实验报告,(合肥工业大学宣城校区JAVA作业问答题.doc
  17. 【shaderforge小实例】 轮廓内发光
  18. 【Latex】Texstudio英文拼写错误检查功能出问题的解决方法
  19. html中点击提交按钮显示提交i成功,百里香叶:点击提交按钮后显示成功信息
  20. Excel 冻结指定行 / 列

热门文章

  1. mysql text 查询速度_数据库学习之让索引加快查询速度(四)
  2. Golang Java 实现 【将有序数组装换为二叉搜索树】
  3. mobilenet V1
  4. 2-4MySQL数据库安装与初始化
  5. windows下的工具链 树莓派_Windows下交叉编译Qt 5.14.2至树莓派平台 QEMU模拟树莓派...
  6. 微波感应模块电路图_关于人体感应灯,你不知道的“冷”知识
  7. 一个进程在执行过程中可以被中断事件打断_Linux操作系统:中断类型和中断的作用...
  8. 用诗歌描写计算机课,小班诗歌公开课教案范文【3篇】
  9. 东北师范计算机研究生课表,东北师范大学全日制工程硕士(计算机技术)专业学位研究生实践教学管理办法...
  10. html自动切换body背景,html中怎么用body元素设置背景颜色