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__属性的区别相关推荐

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

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

  2. python的dir()和__dict__属性的区别

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

  3. python类的属性和对象属性_Python打印对象的全部属性

    原标题:Python打印对象的全部属性 __dict__方法 遇到这样一个情况,要打印出一个对象的各种属性.但是不同对象的属性名都不一样,结构也不同,无法写一个代码来实现.然后我找到了__dict__ ...

  4. python dict下标_Python库collections详解

    collections模块包含了除了内置类型list.dict.tuple之外的容器类型.本文详细介绍了Counter.defaultdict.namedtuple.OrderedDict.Chain ...

  5. p怎么调用python的实例属性_Python中类的声明,使用,属性,实例属性,计算属性及继承,重写...

    Python中的类的定义以及使用: 类的定义: 定义类 在Python中,类的定义使用class关键字来实现 语法如下:classclassName:"类的注释"类的实体 (当没有 ...

  6. python dict排序_python 字典(dict)按键和值排序

    python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行: 1 下面的是按照value的值从大到小的顺序来排序 ...

  7. python内置类属性_Python内置方法和属性应用:反射和单例(推荐)

    1. 前言 python除了丰富的第三方库外,本身也提供了一些内在的方法和底层的一些属性,大家比较常用的如dict.list.set.min.max.range.sorted等.笔者最近在做项目框架时 ...

  8. python获取类的类属性_Python中如何获取类属性的列表

    前言 最近工作中遇到个需求是要得到一个类的静态属性,也就是说有个类 Type ,我要动态获取Type.FTE这个属性的值. 最简单的方案有两个: getattr(Type, 'FTE') Type._ ...

  9. python dict遍历_python入门

    python:简洁,优雅,快捷 简洁到变量可以不用定义直接用,可以调用很多函数,方便移植,对数据的处理速度快,但是耗内存 我学习python的时候,感觉这就像是在看小学生的作业,当然只是刚学习到了基础 ...

最新文章

  1. vue element-ui Notification 挤在一起,重叠问题 解决办法
  2. 诺贝尔奖得主Paul Krugman认可bch发展路线
  3. 在 .NET Core 应用中使用 NHibernate
  4. JAVA判定参数类型进行赋值_java – 为什么泛型方法在赋值中更改了参数化类型?...
  5. 关于iOS 'The sandbox is not sync with the Podfile.lock'问题解决方法
  6. xEasyApp之后端的介绍
  7. .net 2.0 只读TextBox取值问题
  8. 按键精灵脚本学习-关于天猫抢红包
  9. VS2015卸载。非常干净-亲测有用
  10. 绘制正方形图形(C语言)
  11. 【教程】3dsmax Vray材质转换标准材质(提前安装对应的Vary组件)
  12. 手机视频监控直播系统是如何实现的?需要满足哪些条件?
  13. STM32学习(一)—STM32固件库的使用
  14. Java如何实现手动连接数据库(Mysql或Oracle) | 超级详细,建议收藏
  15. Thymeleaf模板(全程案例详解)
  16. 徐松亮常用开发软件与网站
  17. Wipro为悉尼水务局部署SAP S/4HANA®
  18. 干涉仪测向技术matlab算法仿真,相位干涉仪测向算法的Simulink仿真
  19. 数据库监控工具QMonitor
  20. 游标卡尺原理及读数方法

热门文章

  1. mac下的tensorflow报错提示没有models库
  2. GUI for git|SourceTree|入门基础
  3. sql语句or与union all的执行效率比较
  4. js window.open()实现打印,如何在关闭打印窗口时刷新父窗口
  5. mysql数据库系统配置文件_跟我学虚拟机系统平台相关技术及应用——在CentOS系统中的MySql数据库系统配置文件中进行配置定义...
  6. uniapp快查页面链接
  7. PHP删除文件unlink
  8. java 概率 算法_使用概率算法优化快速排序(JAVA)
  9. HTML和CSS常见问题整理
  10. k8s angular mysql_Angular 实践:如何优雅地发起和处理请求