只要是有属性的数据对象(不一定是面向对象的对象实例,而是指具有数据类型的数据对象),都可以通过- ---- __dict__和dir()来显示数据对象的相关属性。

  • __ dict__可以看作是数据对象的名称空间,所以只包含自己的属性,且可以直接增、删、改、查__dict__。
  • dir()可以看作是显示属性的包含显示,除了显示自己的还显示继承来的属性。

对于模块
参见:查看模块属性

对于类和对象

以下面的例子解释__ dict__和dir()在应用于类和对象上的不同之处。

class supcls:def hello(self):self.data1 = 'hello'class childcls(supcls):def world(self):self.data2 = "world"

在显示内容上

  • __dict__是个dict结构,仅仅只显示完全独属于自己的属性
  • dir()是一个list结构,除了显示自己的属性,还显示父类继承而来的属性,比如从祖先类object中继承的属性

下面是__dict__在类属性上显示的结果。注意,这里用keys()只显示数据对象的属性名称,实际上__dict__中既包含了名称,也包含了值。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> childcls.__dict__.keys()
dict_keys(['__module__', 'world', '__doc__'])>>> supcls.__dict__.keys()
dict_keys(['__module__', 'hello', '__dict__', '__weakref__', '__doc__'])

下面是dir()显示类属性时候的结果:

>>> dir(childcls)
['__class__', '__delattr__', '__dict__',
......
'hello', 'world']>>> dir(supcls)
['__class__', '__delattr__', '__dict__',
......
'hello']

注意上面dir(childcls)的结果中含有hello属性,它是来自父类supcls的属性。dir()还显示了一大堆的下划线属性,它们基本上都是继承自祖先类object的属性。

再看看对类的实例对象,它们的显示结果。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> s = supcls()
>>> c = childcls()>>> s.__dict__.keys()
dict_keys([])>>> c.__dict__.keys()
dict_keys([])>>> dir(s)
['__class__', '__delattr__', '__dict__',
......
'hello']>>> dir(c)
['__class__', '__delattr__', '__dict__',
......
'hello', 'world']

设置对象自己的属性,再查看:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> s.hello()
>>> s.__dict__.keys()
dict_keys(['data1'])>>> dir(s)
['__class__', '__delattr__', '__dict__',
......
'data1', 'hello']>>> c.world()
>>> c.__dict__.keys()
dict_keys(['data2'])>>> dir(c)
['__class__', '__delattr__', '__dict__',
......
'data2', 'hello', 'world']>>> c.hello()
>>> c.__dict__.keys()
dict_keys(['data2', 'data1'])>>> dir(c)
['__class__', '__delattr__', '__dict__',
......
'data1', 'data2', 'hello', 'world']

在作用上

__ dict__是一个dict,它和数据对象的属性直接关联,可以直接通过__dict__访问、设置、修改、删除属性,比如类的对象实例可以通过self.x=3设置x属性,也可以通过__dict__[‘x’]=3来设置属性x。而dir()函数仅仅只是展现一些属性。

例如:

>>> c.__dict__['newkey']="NEWKEY"
>>> c.__dict__.keys()
dict_keys(['data2', 'data1', 'newkey'])

上面通过__dict__设置了一个新属性newkey,现在newkey已经是对象c的一个对象属性了。上面的设置方式和c.newkey="NEWKEY"是等价的。

python的dir()和__dict__属性的区别相关推荐

  1. python dict 属性_python的dir()和__dict__属性的区别

    python的dir()和__dict__属性的区别 发布时间:2018-12-08 14:54, 浏览次数:349 , 标签: python dir dict 只要是有属性的数据对象(不一定是面向对 ...

  2. Python之dir()与__dict__的区别

    Python之dir()与__dict__的区别 - iFantasticMe 原文  http://www.cnblogs.com/ifantastic/p/3768415.html 主题 Pyth ...

  3. Python类中的__dict__属性

    __dict__属性是一个字典(dict),它包含了该对象所有的属性. 下面用pytorch中的torchvision.models作比喻: [input]:import torchvision.mo ...

  4. Python __dict__属性详解

    由此可见, 类的静态函数.类函数.普通函数.全局变量以及一些内置的属性都是放在类__dict__里的 对象的__dict__中存储了一些属性 我们都知道Python一切皆对象,那么Python究竟是怎 ...

  5. pythondir什么意思_Python之dir()与__dict__的区别

    首先需要知道的是,dir()是Python提供的一个API函数,dir()函数会自动寻找一个对象的所有属性,包括搜索__dict__中列出的属性. 不是所有的对象都有__dict__属性.例如,如果你 ...

  6. [Python 多线程] 详解daemon属性值None,False,True的区别

    [Python 多线程] 详解daemon属性值None,False,True的区别 记录学习python不懂得和遇到得问题 每个进程至少要有一个线程,并最为程序的入口,这个进程就是主线程. 每个进程 ...

  7. Python的类属性与对象属性的区别

    Python的类属性与对象属性的区别 命名规则: 1.1 类属性由类创建,命名规则为类名.属性名 1.2 对象属性由对象创建,命名规则为对象名.属性名 调用方法: 2.1 类属性由类调用 2.2 对象 ...

  8. 混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解

    混淆概念详细解析:Python中类.对象.方法.函数和属性的区别和理解 前言 一.类.对象.方法.函数和属性的区别和理解 二.一个类的简单案例和对各种概念的理解 三.总结 欢迎学习交流! 邮箱: z- ...

  9. Python中__dict__属性的详解

    __dict__属性的使用 # -*- coding: utf-8 -*- class A(object):a = 0name = Noneb = 1def __init__(self,name):s ...

最新文章

  1. Git 常用操作(1)- 配置、查看、添加、暂存和提交
  2. fir.im Weekly - iOS 保持界面流畅的技巧
  3. 中美领军全球AI竞赛,人工智能被高估了么?
  4. 拉勾教育专栏文章转markdown
  5. 科大星云诗社动态20210303
  6. LeetCode刷题实战(43):Multiply Strings
  7. #中队列的数据结构_数据结构与算法拓展(一)
  8. python paramiko远程执行命令打开窗口_使用Paramiko在远程机器上通过sshClient()执行本地python脚本...
  9. 如何在Win7旗舰版中安装并设置IIS
  10. 2022-7 一套鼠标键盘控制两台及以上电脑
  11. QQ音乐首页静态页面练习
  12. 至联云讲解《FIL和BTC的区别是什么?》
  13. 如何做快手副业?怎么在快手上赚工资?快手发视频怎么赚钱?
  14. XSuperNEST套料引擎
  15. 新的网络架构按下“快进键” 快步走入互联网下半场
  16. 交通-城市规划专业常用——10分钟步行圈(百度API)
  17. SNAP7 PLC协议S7 PDU程式读取长度
  18. 用户价值VS商业价值
  19. 深度解读《关于防范NFT相关金融风险倡议》透露哪些监管信号与数字藏品新发展之路?
  20. C Primer Plus 第九章 大二第二学期 第二天学习

热门文章

  1. MYSQL和ORACLE时区设置比较
  2. ASP.NET MVC 3 Internationalization
  3. VirtualBox 在Linux升级后不能用的解决办法实践
  4. 关于owa over https的邮箱加密访问
  5. 打造安全的网站服务器
  6. udp重发机制_UDP 协议
  7. 艾弗森、穆大叔遭“姚式幽默”调侃 全场爆笑
  8. abap--关于sap地址,传真,邮箱的地址读取
  9. 一生一世高圆圆经典台词
  10. 如何增加SAP_ALL的权限