我们知道,Python中“一切皆对象”,Python是一门真正意义上面向对象的编程语言。因此,如果对对象内部存储结构了解不深入,在学习Python的道路上是没有办法进阶的。今天,我们使用Python提供的对象“魔法”属性__dict__来探讨如何获取对象内部存储的属性和名称值。

准备好了吗?马上开始了

自定义一个对象

class MyObj:

def __init__(self, name, age):

self.name = name

self.age = age

def myFunc(self):

pass

mo = MyObj('Boby', 24)

上述代码自定义一个类MyObj,实例属性有name、age,并提供了一个myFunc()方法,然后我们创建了一个该类的实例mo

定义了一个对象

如何获取对象的内部状态

我们直接使用mo.__dict__即可获取该实例的属性,看下打印结果

>>>

{'name': 'Boby', 'age': 24}

还能做什么

除了查看结果,对于这样的字典结构,我们当然可以设置其中的一个键属性。

比如:

mo.__dict__['name'] = 'Tracy'

mo.__dict__['age'] = 34

我们使用mo.__dict__看下结果

>>>

{'name': 'Tracy', 'age': 34}

还有呢?

我们甚至还可以给这个字典添加其对象中并不存在的属性,如下所示。

mo.__dict__['grade'] = 3

mo.__dict__['address'] = 'BeiJing'

打印输出如下信息:

{'name': 'Tracy', 'age': 34, 'grade': 3, 'address': 'BeiJing'}

这样真的好吗

我们知道,C、Java等面向对象的编程语言,在进行类的初始化时,对与类的限制是很严格的,这样做的好处是安全,我们试想一下,如果创建的一个类在任何情况下,会被任何外部或者内部方法调用,并且可以轻易改动它,这样的做法是很危险的。

这样使用有点危险

比如上面的mo实例,我们执行下面的代码:

mo.__dict__.clear()

mo.__dict__

发生了什么?我们创建的实例成了空白?

这样真的好么?

因此,除非必须,尽量不要使用obj.__dict__这个对象来设置键值对。

好了,今天的内容就到这里了,喜欢的朋友们加个关注,后续会推出更有意思的内容。

转载请注明出处,百家号:Python高手养成

python魔法属性_查看对象内部属性的名称和值,Python“魔法”属性__dict__的使用...相关推荐

  1. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  2. 一个对象的属性_【前端冷知识】如何判断一个对象的某个属性是可写的?

    这是一个咋一听好像很简单,但是实际上却没那么简单,而且是很有趣的问题. 我们先来看一下什么情况下一个对象的属性是可写的. "属性可写"这个概念并没有严谨的定义,我们这里先来规定一下 ...

  3. 使用jol查看对象内部布局

    JOL介绍 JOL可以查看java对象的内部布局,也可以查看对象占用的空间. 如何使用 Maven引入JOL依赖 <dependencies><!-- https://mvnrepo ...

  4. python手把手入门_新手必看:手把手教你入门 Python

    首先,Python是什么?据它的创始人Guido van Rossum而言, "Python是一种高级编程语言,它的核心设计思想是代码可读性和允许程序员用几行代码来表达观点的语法." ...

  5. python @修饰符_数据结构与算法之8——抽象数据类型与python类

    就算你是特别聪明,也要学习,从头学起!--(俄国)屠格涅夫 本篇文章要说的主要是数据结构与算法和python中关于类(Class)以及异常(Error)的一些基础,虽然很简单,但是必须非常重视.只有在 ...

  6. python orm库_周边生态贡献者+1,一个TDengine的Python ORM库—crown

    本文介绍了一个用于操作TDengine的 Python ORM库.本文的预期读者是,需要使用Python语言操作TDengine数据库的开发人员. 什么是ORM? ORM就是对象关系映射(Object ...

  7. 虚拟机python建站_搭建本地虚拟服务器linux(CentOS 7)的python虚拟环境(Hyper-V演示)...

    新建虚拟机->安装CentOS7->新建虚拟交换机:内部网络->CentOS7设置->网络适配器:虚拟交换机:新建虚拟交换机->进入CentOS #cd /etc/sys ...

  8. 小甲鱼零基础入门python教程视频_绝对干货!小甲鱼零基础入门Python视频教程全套96集,值得学习...

    原标题:绝对干货!小甲鱼零基础入门Python视频教程全套96集,值得学习 简介: 今日分享资源为:小甲鱼零基础入门免费学习Python全套教学视频,共96套. 小甲鱼教学视频生动有趣幽默,强烈推荐给 ...

  9. anaconda的python环境变量_装了anaconda之后如何设置anaconda、python环境变量

    装了anaconda之后如何设置anaconda.python环境变量 1.装了anaconda之后如何设置anaconda环境变量 参考 https://www.cnblogs.com/avivi/ ...

最新文章

  1. 微信小程序实时获取用户经纬度
  2. 动车废票二维码将泄露个人信息 暂无防止破解法
  3. 常见面试题 - URL 解析
  4. 通用印刷体识别 php,实战腾讯云ORC文字识别
  5. it项目经理带一个项目的完整_如何控制IT项目需求范围?千万别让用户把你带沟里……...
  6. OpenFlow: Enabling Innovation in Campus Networks
  7. moviepy报错之 .This error can be due to the fact that ImageMagick is not installed on your computer(亲测)
  8. mysql hicharts_PHP怎么调用Mysql的数据给Highcharts
  9. gitlens突然不显示了_损失百万!预防LED显示屏火灾隐患,从三方面入手
  10. EUREKA原理总结
  11. 同时面了腾讯三个部门,拿下offer!
  12. git(16)---解决冲突
  13. POJ3342 Party at Hali-Bula(树型DP求最大独立集+唯一解判断)
  14. leetcode(二)—— Add Two Numbers(Python/C++)
  15. 数据库乐观锁+自旋锁的简单代码实现
  16. 注册公司选小规模还是一般人?四种判别方式讲得明明白白
  17. Centos7使用docke搭建openV
  18. 7-21 输出大写英文字母 (15分)
  19. C Primer Plus基础教程(1)— 初步认识C语言
  20. jquery.slides.js 幻灯片脚本使用方法

热门文章

  1. 数学归纳法证明Nicomachus's Theorem
  2. Java NIO (图解+秒懂+史上最全)
  3. type=text/javascript
  4. 2020/11/18 python实现词性标注(含词库文件)
  5. 第二周 第六讲 单调有界准则及重要极限II
  6. 本地提交spark_Spark在Windows下运行,本地提交spark到远程yarn集群
  7. ORACLE 常用函数——聚合函数
  8. 透过数据看打印市场风云
  9. 人工智能深度学习火起来的原因
  10. 关于python中的open()函数