python dict 属性_python的dir()和__dict__属性的区别
python的dir()和__dict__属性的区别
发布时间:2018-12-08 14:54,
浏览次数:349
, 标签:
python
dir
dict
只要是有属性的数据对象(不一定是面向对象的对象实例,而是指具有数据类型的数据对象),都可以通过__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__中既包含了名称,也包含了值。
>>> 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的属性。
再看看对类的实例对象,它们的显示结果。
>>> 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']
设置对象自己的属性,再查看:
>>> 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 dict 属性_python的dir()和__dict__属性的区别相关推荐
- pythondir什么意思_Python之dir()与__dict__的区别
首先需要知道的是,dir()是Python提供的一个API函数,dir()函数会自动寻找一个对象的所有属性,包括搜索__dict__中列出的属性. 不是所有的对象都有__dict__属性.例如,如果你 ...
- python的dir()和__dict__属性的区别
只要是有属性的数据对象(不一定是面向对象的对象实例,而是指具有数据类型的数据对象),都可以通过- ---- __dict__和dir()来显示数据对象的相关属性. __ dict__可以看作是数据对象 ...
- python类的属性和对象属性_Python打印对象的全部属性
原标题:Python打印对象的全部属性 __dict__方法 遇到这样一个情况,要打印出一个对象的各种属性.但是不同对象的属性名都不一样,结构也不同,无法写一个代码来实现.然后我找到了__dict__ ...
- python dict下标_Python库collections详解
collections模块包含了除了内置类型list.dict.tuple之外的容器类型.本文详细介绍了Counter.defaultdict.namedtuple.OrderedDict.Chain ...
- p怎么调用python的实例属性_Python中类的声明,使用,属性,实例属性,计算属性及继承,重写...
Python中的类的定义以及使用: 类的定义: 定义类 在Python中,类的定义使用class关键字来实现 语法如下:classclassName:"类的注释"类的实体 (当没有 ...
- python dict排序_python 字典(dict)按键和值排序
python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行: 1 下面的是按照value的值从大到小的顺序来排序 ...
- python内置类属性_Python内置方法和属性应用:反射和单例(推荐)
1. 前言 python除了丰富的第三方库外,本身也提供了一些内在的方法和底层的一些属性,大家比较常用的如dict.list.set.min.max.range.sorted等.笔者最近在做项目框架时 ...
- python获取类的类属性_Python中如何获取类属性的列表
前言 最近工作中遇到个需求是要得到一个类的静态属性,也就是说有个类 Type ,我要动态获取Type.FTE这个属性的值. 最简单的方案有两个: getattr(Type, 'FTE') Type._ ...
- python dict遍历_python入门
python:简洁,优雅,快捷 简洁到变量可以不用定义直接用,可以调用很多函数,方便移植,对数据的处理速度快,但是耗内存 我学习python的时候,感觉这就像是在看小学生的作业,当然只是刚学习到了基础 ...
最新文章
- vue element-ui Notification 挤在一起,重叠问题 解决办法
- 诺贝尔奖得主Paul Krugman认可bch发展路线
- 在 .NET Core 应用中使用 NHibernate
- JAVA判定参数类型进行赋值_java – 为什么泛型方法在赋值中更改了参数化类型?...
- 关于iOS 'The sandbox is not sync with the Podfile.lock'问题解决方法
- xEasyApp之后端的介绍
- .net 2.0 只读TextBox取值问题
- 按键精灵脚本学习-关于天猫抢红包
- VS2015卸载。非常干净-亲测有用
- 绘制正方形图形(C语言)
- 【教程】3dsmax Vray材质转换标准材质(提前安装对应的Vary组件)
- 手机视频监控直播系统是如何实现的?需要满足哪些条件?
- STM32学习(一)—STM32固件库的使用
- Java如何实现手动连接数据库(Mysql或Oracle) | 超级详细,建议收藏
- Thymeleaf模板(全程案例详解)
- 徐松亮常用开发软件与网站
- Wipro为悉尼水务局部署SAP S/4HANA®
- 干涉仪测向技术matlab算法仿真,相位干涉仪测向算法的Simulink仿真
- 数据库监控工具QMonitor
- 游标卡尺原理及读数方法
热门文章
- mac下的tensorflow报错提示没有models库
- GUI for git|SourceTree|入门基础
- sql语句or与union all的执行效率比较
- js window.open()实现打印,如何在关闭打印窗口时刷新父窗口
- mysql数据库系统配置文件_跟我学虚拟机系统平台相关技术及应用——在CentOS系统中的MySql数据库系统配置文件中进行配置定义...
- uniapp快查页面链接
- PHP删除文件unlink
- java 概率 算法_使用概率算法优化快速排序(JAVA)
- HTML和CSS常见问题整理
- k8s angular mysql_Angular 实践:如何优雅地发起和处理请求