Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 클래스 브라우저 지원

<시간/>

pyclbr Python 라이브러리의 module은 Python 모듈에 정의된 함수, 클래스 및 메서드에 대한 정보를 추출합니다. 모듈을 가져오는 것이 아니라 Python 소스 코드에서 정보를 추출합니다.

이 모듈은 readmodule()을 정의합니다. 모듈 수준 클래스 이름을 클래스 설명자에 매핑하는 사전을 반환하는 함수입니다. 이 함수는 모듈 이름을 매개변수로 사용합니다. 패키지 내 모듈의 이름일 수 있습니다. 이 경우 경로는 모듈 소스 코드를 찾는 데 사용되는 sys.path 앞에 추가된 일련의 디렉토리 경로입니다.

다음 코드는 Python 라이브러리의 소켓 모듈에 있는 클래스와 메서드를 구문 분석하기 위해 readmodule() 함수를 사용합니다.

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()도 정의합니다. 모듈에 정의된 각 함수 및 클래스에 대한 함수 또는 클래스 설명자를 포함하는 사전을 반환하는 함수입니다. 반환된 사전은 모듈 수준 함수와 클래스 이름을 설명자에 매핑합니다. 중첩된 개체는 부모의 자식 사전에 입력됩니다.

>>> 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 모듈은 Class 객체와 Function 객체의 두 가지 객체를 정의합니다.

함수 개체에 다음 속성이 있습니다.

파일
함수가 정의된 파일의 이름입니다.
모듈
설명된 기능을 정의하는 모듈의 이름입니다.
이름
함수의 이름입니다.
라인노
정의가 시작되는 파일의 줄 번호입니다.
부모
최상위 기능의 경우 없음. 중첩 함수의 경우 부모.
어린이
중첩된 함수 및 클래스에 대한 설명자에 대한 사전 매핑 이름.

클래스 개체에는 위의 속성 외에 두 가지 속성이 더 있습니다.

수퍼
설명되는 클래스의 직접적인 기본 클래스를 설명하는 Class 객체 목록.
메서드
메서드 이름을 줄 번호에 매핑하는 사전입니다.