热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python打印对象的全部属性

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

  __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 开发指南:深入理解高级变量类型与函数进阶应用
    Python 开发指南:深入理解高级变量类型与函数进阶应用 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 每年,意甲、德甲、英超和西甲等各大足球联赛的赛程表都是球迷们关注的焦点。本文通过 Python 编程实现了一种生成赛程表的方法,该方法基于蛇形环算法。具体而言,将所有球队排列成两列的环形结构,左侧球队对阵右侧球队,首支队伍固定不动,其余队伍按顺时针方向循环移动,从而确保每场比赛不重复。此算法不仅高效,而且易于实现,为赛程安排提供了可靠的解决方案。 ... [详细]
  • 数据库多表联合查询:内连接与外连接详解
    在数据库的多表查询中,内连接和外连接是两种常用的技术手段。内连接用于检索多个表中相互匹配的记录,即只有当两个表中的记录满足特定的连接条件时,这些记录才会被包含在查询结果中。相比之下,外连接则不仅返回匹配的记录,还可以选择性地返回不匹配的记录,具体取决于左外连接、右外连接或全外连接的选择。本文将详细解析这两种连接方式的使用场景及其语法结构,帮助读者更好地理解和应用多表查询技术。 ... [详细]
  • 本文探讨了利用Python实现高效语音识别技术的方法。通过使用先进的语音处理库和算法,本文详细介绍了如何构建一个准确且高效的语音识别系统。提供的代码示例和实验结果展示了该方法在实际应用中的优越性能。相关文件可从以下链接下载:链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ,提取码:p57s。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 本文详细介绍了 Python 中字符串处理的各种技巧,包括查找、复制、替换、删除、截取、连接、比较、包含检测及大小写转换等操作。特别强调了如何使用 `strip()`、`lstrip()` 和 `rstrip()` 方法去除字符串中的空格和特殊符号,以及如何通过简单的赋值语句实现字符串的复制。此外,还提供了丰富的示例代码,帮助读者更好地理解和应用这些技巧。 ... [详细]
  • 本文介绍了 Python 编程中的一些实用技巧和优化方法。首先,讨论了如何高效地交换两个变量的值,例如 `a` 和 `b` 可以通过 `a, b = b, a` 来实现。此外,文章还提供了在进行数值比较时的简洁写法,如使用 `3.14` 进行精确匹配。这些技巧不仅提高了代码的可读性,还能提升程序的运行效率。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • 在Python多进程编程中,`multiprocessing`模块是不可或缺的工具。本文详细探讨了该模块在多进程管理中的核心原理,并通过实际代码示例进行了深入分析。文章不仅总结了常见的多进程编程技巧,还提供了解决常见问题的实用方法,帮助读者更好地理解和应用多进程编程技术。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 本文详细探讨了使用纯JavaScript开发经典贪吃蛇游戏的技术细节和实现方法。通过具体的代码示例,深入解析了游戏逻辑、动画效果及用户交互的实现过程,为开发者提供了宝贵的参考和实践经验。 ... [详细]
author-avatar
戴劳力士_484
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有