Python 類瀏覽器支援


Python 庫中的 **pyclbr** 模組可以提取關於在 Python 模組中定義的函式、類和方法的資訊。這些資訊是從 Python 原始碼中提取的,而不是透過匯入模組來獲取。

此模組定義了 **readmodule()** 函式,該函式返回一個字典,將模組級類名對映到類描述符。該函式採用模組名作為引數。它可能是包中模組的名稱。在這種情況下,path 是一個目錄路徑序列,新增到 sys.path 前面,用於定位模組原始碼。

以下程式碼使用 readmodule() 函式來解析 Python 庫的 socket 模組中的類和方法。

import pyclbr

mod = pyclbr.readmodule("socket")

def show(c):
   s = "class " + c.name
   print (s + ":")
   methods = c.methods.items()
   for method, lineno in methods:
      print (" def " + method)
   print()

for k, v in mod.items():
   show(v)
class IntEnum:

class IntFlag:
   def _missing_
   def _create_pseudo_member_
   def __or__
   def __and__
   def __xor__
   def __invert__

class _GiveupOnSendfile:

class socket:
   def __init__
   def __enter__
   def __exit__
   def __repr__
   def __getstate__
   def dup
   def accept
   def makefile
   def _sendfile_use_sendfile
   def _sendfile_use_send
   def _check_sendfile_params
   def sendfile
   def _decref_socketios
   def _real_close
   def close
   def detach
   def family
   def type
   def get_inheritable
   def set_inheritable

class SocketIO:
   def __init__
   def readinto
   def write
   def readable
   def writable
   def seekable
   def fileno
   def name
   def mode
   def close

pyclbr 模組還定義了 **readmodule_ex()** 函式,該函式返回一個字典,其中包含模組中定義的每個函式或類描述符。返回的字典將模組級函式和類名對映到它們的描述符。巢狀物件被輸入到其父物件的 children 字典中。

>>> x = pyclbr.readmodule_ex('socket')

>>> for k,v in x.items():
print (k,v)


IntEnum <pyclbr.Class object at 0x000002095D7D0048>
IntFlag <pyclbr.Class object at 0x000002095D7D04E0>
_intenum_converter <pyclbr.Function object at 0x000002095D82F940>
_GiveupOnSendfile <pyclbr.Class object at 0x000002095D822898>
socket <pyclbr.Class object at 0x000002095D8227B8>
fromfd <pyclbr.Function object at 0x000002095D8340B8>
fromshare <pyclbr.Function object at 0x000002095D82FEF0>
socketpair <pyclbr.Function object at 0x000002095D834128>
SocketIO <pyclbr.Class object at 0x000002095D82FA20>
getfqdn <pyclbr.Function object at 0x000002095D8344E0>
create_connection <pyclbr.Function object at 0x000002095D834518>
getaddrinfo <pyclbr.Function object at 0x000002095D834550>

這些函式也可以與自定義模組一起使用,以獲取使用者定義的類和方法的目錄。

在下面的示例中,使用模組 'triangles.py' 來獲取其類結構。

#triangles.py
import math
class Triangle:
   def __init__(self, a, b, c):
      self.a = a
      self.b = b
     self.c = c
   def area(self):
      s=(self.a+self.b+self.c)/2
      area=math.sqrt(s*(s-self.a)*(s-self.b)*(s-self.c))
      return area
class EquiTriangle(Triangle):
   def __init__(self, a):
      b = a
      c = a
      super().__init__(a,b,c)
   def area(self):
      area=math.sqrt(3)*pow(self.a,2)/4
      return area

我們現在將獲取 'triangles' 模組中的類和方法。

>>> br = pyclbr.readmodule_ex('triangles')
>>> for i,j in br.items(): print (i,j.methods)

Triangle {'__init__': 3, 'area': 7}
EquiTriangle {'__init__': 12, 'area': 16}

pyclbr 模組定義了兩個物件——類物件和函式物件。

**函式** 物件具有以下屬性:

file
 定義函式的檔名。
module
 定義所描述函式的模組名。
name
 函式名。
lineno
 檔案中定義開始的行號。
parent
 對於頂級函式,為 None。對於巢狀函式,為其父函式。
children
 一個字典,將名稱對映到巢狀函式和類的描述符。

除了上述屬性外,**類** 物件還有兩個額外的屬性:

super
 一個類物件列表,描述正在描述的類的直接基類。
methods
 一個字典,將方法名對映到行號。

更新於:2019年7月30日

225 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告