19 Python __dict__与dir()区别
Python __dict__与dir()
- Python __dict__与dir
- __dict__属性
- dir函数
- 结论
转载请标明出处(http://blog.csdn.net/lis_12/article/details/53521554).
Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案。
__dict__与dir()
的区别:
- dir()是一个函数,返回的是list;
__dict__
是一个字典,键为属性名,值为属性值;- dir()用来寻找一个对象的所有属性,包括
__dict__
中的属性,__dict__
是dir()的子集;
并不是所有对象都拥有__dict__
属性。许多内建类型就没有__dict__
属性,如list,此时就需要用dir()来列出对象的所有属性。
__dict__
属性
__dict__
是用来存储对象属性的一个字典,其键为属性名,值为属性的值。
#!/usr/bin/python
# -*- coding: utf-8 -*-
class A(object):class_var = 1def __init__(self):self.name = 'xy'self.age = 2@propertydef num(self):return self.age + 10def fun(self):passdef static_f():passdef class_f(cls):passif __name__ == '__main__':#主程序a = A()print a.__dict__ #{'age': 2, 'name': 'xy'} 实例中的__dict__属性print A.__dict__ '''类A的__dict__属性{'__dict__': <attribute '__dict__' of 'A' objects>, #这里如果想深究的话查看参考链接5'__module__': '__main__', #所处模块'num': <property object>, #特性对象 'class_f': <function class_f>, #类方法'static_f': <function static_f>, #静态方法'class_var': 1, 'fun': <function fun >, #类变量'__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None, #class说明字符串'__init__': <function __init__ at 0x0000000003451AC8>}'''a.level1 = 3a.fun = lambda :xprint a.__dict__ #{'level1': 3, 'age': 2, 'name': 'xy','fun': <function <lambda> at 0x>}print A.__dict__ #与上述结果相同A.level2 = 4print a.__dict__ #{'level1': 3, 'age': 2, 'name': 'xy'}print A.__dict__ #增加了level2属性print object.__dict__'''{'__setattr__': <slot wrapper '__setattr__' of 'object' objects>, '__reduce_ex__': <method '__reduce_ex__' of 'object' objects>, '__new__': <built-in method __new__ of type object at>, 等.....'''
从上述代码可知,
实例的
__dict__
仅存储与该实例相关的实例属性,正是因为实例的
__dict__
属性,每个实例的实例属性才会互不影响。类的
__dict__
存储所有实例共享的变量和函数(类属性,方法等),类的__dict__
并不包含其父类的属性。
dir()函数
dir()是Python提供的一个API函数,dir()函数会自动寻找一个对象的所有属性(包括从父类中继承的属性)。
一个实例的__dict__
属性仅仅是那个实例的实例属性的集合,并不包含该实例的所有有效属性。所以如果想获取一个对象所有有效属性,应使用dir()。
print dir(A)
'''
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'class_f', 'class_var', 'fun', 'level1', 'level2', 'name', 'num', 'static_f']
'''
a_dict = a.__dict__.keys()
A_dict = A.__dict__.keys()
object_dict = object.__dict__.keys()
print a_dict
print A_dict
print object_dict
'''
['fun', 'level1', 'age', 'name']['__module__', 'level2', 'num', 'static_f', '__dict__', '__weakref__', '__init__', 'class_f', 'class_var', 'fun', '__doc__']['__setattr__', '__reduce_ex__', '__new__', '__reduce__', '__str__', '__format__', '__getattribute__', '__class__', '__delattr__', '__subclasshook__', '__repr__', '__hash__', '__sizeof__', '__doc__', '__init__']
'''#因为每个类都有一个__doc__属性,所以需要去重,去重后然后比较
print set(dir(a)) == set(a_dict + A_dict + object_dict) #True
结论
dir()函数会自动寻找一个对象的所有属性,包括__dict__
中的属性。
__dict__
是dir()的子集,dir()包含__dict__
中的属性。
参考网址
- https://docs.python.org/2/howto/descriptor.html?highlight=descriptor%20protocol#id1
- http://stackoverflow.com/questions/4877290/what-is-the-dict-dict-attribute-of-a-python-class
- http://www.tuicool.com/articles/ZbQFF3u
- http://www.jb51.net/article/54540.htm
- http://blog.csdn.net/lis_12/article/details/53519060
19 Python __dict__与dir()区别相关推荐
- python中__dict__与dir()区别
前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...
- python __dict__ ,dir()
Python __dict__与dir() Python __dict__与dir __dict__属性 dir函数 结论 转载请标明出处(http://blog.csdn.net/lis_12/ar ...
- python dict 属性_python的dir()和__dict__属性的区别
python的dir()和__dict__属性的区别 发布时间:2018-12-08 14:54, 浏览次数:349 , 标签: python dir dict 只要是有属性的数据对象(不一定是面向对 ...
- python的dir()和__dict__属性的区别
只要是有属性的数据对象(不一定是面向对象的对象实例,而是指具有数据类型的数据对象),都可以通过- ---- __dict__和dir()来显示数据对象的相关属性. __ dict__可以看作是数据对象 ...
- 一文读懂 JavaScript 和 Python 九大语义区别
作者 | Ruqayyah Sara 译者 | 弯月,责编 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 我是一名全栈开发.前几天我一直在研究算法和数据结构,因为对于程序员而言,最重要能力 ...
- python编程语言-python与其他编程语言区别全在这
码农阿勇 2020-02-05 19:10:00 对于接触过编程语言的人来说,如果要快速上手python,首先要了解python和其他编程语言的主要区别在哪?下边勇哥主要以使用较多的JAVA和C语言来 ...
- Python 2.x 与 Python 3.x 的区别
前言 如果你是刚接触 Python 的初学者,那你可能是直接学习 Python 3.x 版本.对于 Python 2.x 的版本是不会有所接触.官方也宣布在 2020 停止对 Python 2.x 的 ...
- python工程师是什么专业-猎维科技告诉你人工智能工程师与Python工程师有什么区别?...
学习Python就等于学习人工智能吗?当然不!千万不要混淆它们的概念!Python工程师并不等同于人工智能工程师.(关注公众号"猎维人工智能") Python工程师与人工智能工程师 ...
- php和python区别-PHP与Python语言有哪些区别之处?选择哪一个好?
其实针对不同阶段的学者来说,他们的需求自然也有所不同.本篇文章主要分析了php和python哪个好以及介绍PHP与Python的区别之处,希望对还在为学习PHP和Python中哪一个语言而摇摆不定的朋 ...
最新文章
- 智能驾驶是否会“运动式”发展
- golang值为nil的channel
- HighNewTech:支付宝全球首发5G手机,四大逆天功能(防骗三折叠气味识别自由飞)!
- Go——Artifactory的AQL查询以及json解析解决方案
- http协议客户端向服务器端请求时一般需要发送的内容
- Cocos2d-x学习之创建Android工程和编译
- 【邮政编码识别】基于matlab灰度二值化邮政编码识别【含Matlab源码 788期】
- java textarea滚动条_java中swing的textArea滚动条显示不出来
- 抖音做综艺,差点意思
- 2018美赛D翻译从汽油驾驶到 E 驾驶( E 指电,而不是空)
- STM32F103红外遥控
- 手工焊接SSOP贴片元件步骤总结
- 什么是听觉?机器听觉?
- 如何把密度函数化为标准正态二维分布_高中就开始学的正态分布,原来如此重要...
- 微信朋友圈爬虫python_python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。...
- C#发送邮件(阿里企业邮箱示例 包括各个类型的服务器及端口配置)
- Python数据分析_电商数据分析报告
- A. IQ test
- iOS端实现登录输入框的三种思路(包含UIBezierPath等)
- 编写自己的驱动过游戏保护-需要具备的理论知识
热门文章
- Linux 文件/文件夹无法删除问题解决方案
- OpenCASCADE入门指南
- 检测到可疑访问 php,php.net被Chrome/Firefox浏览器标注为可疑站点
- 修复恢复可疑的SQLServer数据库
- Rufus开源版U盘引导制作工具V3.16
- js或者jQuery模拟点击提交按钮button,触发提交操作
- OpenGL之路(一)OpenGL、gl、glu、glut的区别 + glut环境的搭建
- linux中time命令详解、脚本监控记录系统硬盘io值、定位linux系统中await值过高占用的盘、定位占用硬盘IO高的程序、iotop命令说明、lsof使用说明【可定位端口所占用程序等】
- leetcode-数组知识点(中等)
- Kotlin Flow 冷流 StateFlow 热流 StateFlow 的应用