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 相关文章推荐
使用grappelli为django admin后台添加模板
Nov 18 Python
python轻松查到删除自己的微信好友
Jan 10 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
详解python使用turtle库来画一朵花
Mar 21 Python
PYQT5实现控制台显示功能的方法
Jun 25 Python
python实现图片中文字分割效果
Jul 22 Python
Python中zip()函数的简单用法举例
Sep 02 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
python 实现Requests发送带cookies的请求
Feb 08 Python
python实现网络五子棋
Apr 11 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
SONY SRF-40W电路分析
2021/03/02 无线电
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
PHP在线生成二维码代码(google api)
2013/06/03 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
Python的math模块中的常用数学函数整理
2016/02/04 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
Python中表示字符串的三种方法
2017/09/06 Python
python使用mysql的两种使用方式
2018/03/07 Python
python psutil模块使用方法解析
2019/08/01 Python
python中property和setter装饰器用法
2019/12/19 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
Html5元素及基本语法详解
2016/08/02 HTML / CSS
科研课题实施方案
2014/03/18 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript