Python内置函数dir详解


Posted in Python onApril 14, 2015

1.命令介绍

最近学习并使用了一个python的内置函数dir,首先help一下:

>>> help(dir)

Help on built-in function dir in module __builtin__:


dir()

    dir([object]) -> list of strings


    Return an alphabetized list of names comprising (some of) the attributes

    of the given object, and of attributes reachable from it:


    No argument:  the names in the current scope.

    Module object:  the module attributes.

    Type or class object:  its attributes, and recursively the attributes of

        its bases.

    Otherwise:  its attributes, its class's attributes, and recursively the

        attributes of its class's base classes.

通过help,可以简单的认为dir列出指定对象或类的属性。
2.实例
下面是一个简单的测试:
 class A:

     def a(self):

         pass

 

 

 class A1(A):

    def a1(self):

        pass


if __name__ == '__main__':

    print("dir without arguments:", dir())

    print("dir class A:", dir(A))

    print("dir class A1:", dir(A1))

    a = A1()

    print("dir object a(A1):", dir(a))

    print("dir function a.a:", dir(a.a))

测试结果:
dir without arguments: ['A', 'A1', '__builtins__', '__doc__', '__file__', '__name__', '__package__']

dir class A: ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a']

dir class A1: ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'a1']

dir object a(A1): ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'a1']

dir function a.a: ['__call__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__func__', '__ge__', '__get__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

3.使用dir查找module下的所有类
最初使用这个函数的初衷,就是在一个module中查找实现的类名,通过该函数可以很容易的实现。
比如把上面的测试程序保存为A.py,再建一个测试程序,内容如下:
import A
if __name__ == '__main__':

    print("dir module A:", dir(A))

结果如下:
dir module A: ['A', 'A1', '__builtins__', '__doc__', '__file__', '__name__', '__package__']

可以看出class A和A1都能够找到。

4.如何找到当前模块下的类

这是一个烦恼较长时间的一个问题,也没有搜到详细的解决方法,下面是我的集中实现方法。

4.1.方法一:在module下面直接调用

比如在上面的A.py最下面添加一行,即可在后续的代码中可以使用selfDir来查找当前的module下的类,修改后的代码如下:

 class A:

     def a(self):

         pass

 

 class A1(A):

     def a1(self):

         pass

 

 curModuleDir=dir()  # get dir of current file(module)
if __name__ == '__main__':

    print("dir without arguments:", dir())

    print("dir class A:", dir(A))

    print("dir class A1:", dir(A1))

    a = A1()

    print("dir object a(A1):", dir(a))

    print("dir function a.a:", dir(a.a))

    print("dir current file:", curModuleDir)

4.2.方法二:import当前module
把当前module和别的import一样引用,代码如下:

 # A.py

 import A as this # import current module

 

 class A:

     def a(self):

         pass

 

 class A1(A):

     def a1(self):

        pass
if __name__ == '__main__':

    print("dir without arguments:", dir())

    print("dir class A:", dir(A))

    print("dir class A1:", dir(A1))

    a = A1()

    print("dir object a(A1):", dir(a))

    print("dir function a.a:", dir(a.a))

    print("dir current file:", dir(this))

4.3.方法三:根据module名称查找module,然后调用dir
我们知道module下面有个属性__name__显示module名称,怎么能够根据module名称来查找module对象呢?可以借助sys.modules。代码如下:
import sys
class A:

    def a(self):

        pass
class A1(A):

    def a1(self):

        pass
if __name__ == '__main__':

    print("dir without arguments:", dir())

    print("dir class A:", dir(A))

    print("dir class A1:", dir(A1))

    a = A1()

    print("dir object a(A1):", dir(a))

    print("dir function a.a:", dir(a.a))

    print("dir current file:", dir(sys.modules[__name__])) # 使用__name__获取当前module对象,然后使用对象获得dir
Python 相关文章推荐
Python+Django在windows下的开发环境配置图解
Nov 11 Python
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
Python requests模块实例用法
Feb 11 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
三个python爬虫项目实例代码
Dec 28 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
无惧面试,带你搞懂python 装饰器
Aug 17 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
python中Matplotlib绘制直线的实例代码
Jul 04 Python
Python最基本的数据类型以及对元组的介绍
Apr 14 #Python
Python isinstance函数介绍
Apr 14 #Python
Python with用法实例
Apr 14 #Python
详细探究Python中的字典容器
Apr 14 #Python
Python中decorator使用实例
Apr 14 #Python
用Python创建声明性迷你语言的教程
Apr 13 #Python
Python中的Numeric包和Numarray包使用教程
Apr 13 #Python
You might like
php empty函数 使用说明
2009/08/10 PHP
初识PHP
2014/09/28 PHP
discuz目录文件资料汇总
2014/12/30 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
JavaScript闭包详解
2015/02/02 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
Python对象体系深入分析
2014/10/28 Python
python获取代理IP的实例分享
2018/05/07 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
python变量命名的7条建议
2019/07/04 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
Python数据库小程序源代码
2019/09/15 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
英国家用电器购物网站:Hughes
2018/02/23 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
专业实习自我鉴定
2013/10/29 职场文书
大专学生求职自荐信
2014/07/06 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
关于python类SortedList详解
2021/09/04 Python