Python内置函数dir详解

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

(0)

相关推荐

  • python dict.get()和dict['key']的区别详解

    先看代码: In [1]: a = {'name': 'wang'} In [2]: a.get('age') In [3]: a['age'] --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-3-a620cb7b172a> in <module>() ----&g

  • 基于Python __dict__与dir()的区别详解

    Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: __dict__是一个字典,键为属性名,值为属性值: dir()用来寻找一个对象的所有属性,包括__dict__中的属性,__dict__是dir()的子集: 并不是所有对象都拥有__dict__属性.许多内建类型就没有__dict__属性,如list,此时就需要用dir()来列出对象的所有属性. __di

  • python中dir函数用法分析

    本文实例讲述了python中dir函数用法.分享给大家供大家参考.具体分析如下: dir 函数返回任意对象的属性和方法列表, 包括模块对象.函数对象.字符串对象.列表对象.字典对象 ...... 相当多的东西. dir函数示例: >>> li = [] >>> dir(li) ['append','count','extend','index','insert', 'pop','remove','reverse','sort'] >>> d = {}

  • Python内置函数dir详解

    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

  • python 内置函数汇总详解

    1.强制类型转换 dict() 强制转换为字典类型 list() 强制转换为列表类型 tuple() 强制转换为元组类型 int() 强制转为整形 str() 强制转换为字符串类型 bool() 强制转换为布尔类型 set() 强制转换为集合类型 2.输入输出 print() 输出 input() 输入 3.数学相关 abs() 绝对值 qqq = abs(-253) print(qqq) float() 转换成浮点型 v = 55 v1 = float(v) print(v1) max() 找

  • python内置函数zip详解

    目录 一.简介 二.详解 三.代码 四.Reference 总结 一.简介 zip() 函数用于将可迭代的对象作为参数,主要功能是将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个iterable迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表. 要点:打包成元组,返回列表,如果长度不一致,则与短的iterable对齐 二.详解 语法:zip([iterable, ...]) 参数:iterable是一个或者多个可以迭代的

  • Python内置函数OCT详解

    英文文档: 复制代码 代码如下: oct ( x ) Convert an integer number to an octal string. The result is a valid Python expression. If x is not a Pythonobject, it has to define anmethod that returns an integer. 说明: 1. 函数功能将一个整数转换成8进制字符串.如果传入浮点数或者字符串均会报错. >>> a = o

  • Python 内置函数complex详解

    英文文档: class complex([real[, imag]]) Return a complex number with the value real + imag*1j or convert a string or number to a complex number. If the first parameter is a string, it will be interpreted as a complex number and the function must be calle

  • 六个Python编程最受用的内置函数使用详解

    目录 1. Map 函数 2. Lamdba 函数 3. Enumerate 函数 4. Reduce 函数 5. Filter 函数 6. Zip 函数 在日常的python编程中使用这几个函数来简化我们的编程工作,经常使用能使编程效率大大地提高. 1. Map 函数 map函数可以使用另外一个函数转换整个可迭代对象的函数,包括将字符串转换为数字.数字的四舍五入等等. 之所以使用map函数来完成这些事情可以节约内存,使代码的运行速度提高,并且使用的代码量比较少. 比如这里需要将一个字符串的数组

  • Java 数组内置函数toArray详解

    java.util.List中的toArray函数 java.util.List<E> @NotNull public abstract <T> T[] toArray(@NotNull T[] a) Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned

  • 基于python内置函数与匿名函数详解

    内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open() str() bool() exec() isinstance() pow() super

  • Python内置函数zip map filter的使用详解

    并行遍历zip zip会取得一个或多个序理为参数,然后返回元组的列表,将这些序列中的并排的元素配成对. L1=[1,2,3,4] L2=[5,6,7,8] L3=zip(L1,L2) print(L3,type(L3)) <zip object at 0x7feb81b17f08> <class 'zip'> zip在python3中是一个可迭代对象,我们可以将其包含在list调用中以例一次性显示所有结果 list(L3) [(1, 5), (2, 6), (3, 7), (4,

  • python内置函数之slice案例详解

    英文文档: class slice(stop) class slice(start, stop[, step]) Return a slice object representing the set of indices specified by range(start, stop, step). The start and step arguments default to None. Slice objects have read-only data attributes start, st

随机推荐