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.实例
下面是一个简单的测试:
 1 class  A:
 2      def  a(self):
 3          pass
 4
 5
 6 class  A1(A):
 7      def  a1(self):
 8          pass
 9
10
11 if   __name__   ==   ' __main__ ' :
12      print ( " dir without arguments: " , dir())
13      print ( " dir class A: " , dir(A))
14      print ( " dir class A1: " , dir(A1))
15     a  =  A1()
16      print ( " dir object a(A1): " , dir(a))
17      print ( " dir function a.a: " , dir(a.a))
18
测试结果:
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,再建一个测试程序,内容如下:
1 import  A
2
3
4 if   __name__   ==   ' __main__ ' :
5      print ( " dir module A: " , dir(A))
6
结果如下:
dir module A: [ ' A ' ' A1 ' ' __builtins__ ' ' __doc__ ' ' __file__ ' ' __name__ ' ' __package__ ' ]
可以看出class A和A1都能够找到。
4.如何找到当前模块下的类
这是一个烦恼较长时间的一个问题,也没有搜到详细的解决方法,下面是我的集中实现方法。
4.1.方法一:在module下面直接调用
比如在上面的A.py最下面添加一行,即可在后续的代码中可以使用selfDir来查找当前的module下的类,修改后的代码如下:
 1 class  A:
 2      def  a(self):
 3          pass
 4
 5 class  A1(A):
 6      def  a1(self):
 7          pass
 8
 9 curModuleDir = dir()   #  get dir of current file(module) 
10
11 if   __name__   ==   ' __main__ ' :
12      print ( " dir without arguments: " , dir())
13      print ( " dir class A: " , dir(A))
14      print ( " dir class A1: " , dir(A1))
15     a  =  A1()
16      print ( " dir object a(A1): " , dir(a))
17      print ( " dir function a.a: " , dir(a.a))
18      print ( " dir current file: " , curModuleDir)
19

4.2.方法二:import当前module
把当前module和别的import一样引用,代码如下:
 1 #  A.py
 2 import  A as this  #  import current module
 3
 4 class  A:
 5      def  a(self):
 6          pass
 7
 8 class  A1(A):
 9      def  a1(self):
10          pass
11
12 if   __name__   ==   ' __main__ ' :
13      print ( " dir without arguments: " , dir())
14      print ( " dir class A: " , dir(A))
15      print ( " dir class A1: " , dir(A1))
16     a  =  A1()
17      print ( " dir object a(A1): " , dir(a))
18      print ( " dir function a.a: " , dir(a.a))
19      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内置函数--dir)