|
Posted on 2009-10-16 20:32 小夜 閱讀(3119) 評論(0) 編輯 收藏 引用 所屬分類: [52] Python
1.命令介紹
通過help,可以簡單的認為dir列出指定對象或類的屬性。
2.實例
測試結果:
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中查找實現的類名,通過該函數可以很容易的實現。
結果如下:
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
|