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抓取网页时字符集转换问题处理方案分享
Jun 19 Python
对于Python的Django框架部署的一些建议
Apr 09 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
Python动态语言与鸭子类型详解
Jul 01 Python
python for循环remove同一个list过程解析
Aug 14 Python
python解析yaml文件过程详解
Aug 30 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
在Python 中将类对象序列化为JSON
Apr 06 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
Python正则表达式的使用范例详解
2014/08/08 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
医学专业毕业生推荐信
2013/11/14 职场文书
会议邀请书范文
2014/02/02 职场文书
美术教师自我鉴定
2014/02/12 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
MySQL三种方式实现递归查询
2022/04/18 MySQL