pyclbr — Python 모듈 브라우저 지원

pyclbr — Python 모듈 브라우저 지원

소스 코드: Lib/pyclbr.py

pyclbr 모듈은 Python으로 작성된 모듈에 정의된 함수, 클래스, 메서드에 대한 제한된 정보를 제공해요. 그 정보는 모듈 브라우저를 구현하기에 충분해요. 이 정보는 모듈을 임포트하지 않고 Python 소스 코드에서 직접 추출되므로, 이 모듈은 신뢰할 수 없는 코드와 함께 사용하기에 안전해요. 하지만 이 제약 때문에 표준·선택 확장 모듈을 포함해 Python으로 구현되지 않은 모듈에는 이 모듈을 사용할 수 없어요.

출처: Python 표준 라이브러리

본문

pyclbr.readmodule(module, path=None)

모듈 수준의 클래스 이름을 클래스 디스크립터에 매핑하는 사전을 돌려줘요. 가능하면 임포트된 기본 클래스의 디스크립터도 포함돼요. module 매개변수는 읽을 모듈의 이름을 담은 문자열이에요. 패키지 안의 모듈 이름일 수도 있어요. 주어지면 pathsys.path 앞에 붙는 디렉터리 경로의 시퀀스로, 모듈 소스 코드를 찾는 데 사용돼요.

이 함수는 원래의 인터페이스로, 하위 호환성을 위해 유지돼요. 아래 함수의 필터링된 버전을 돌려줘요.

pyclbr.readmodule_ex(module, path=None)

defclass 문으로 모듈에 정의된 각 함수·클래스에 대한 함수 또는 클래스 디스크립터를 담은 사전 기반 트리를 돌려줘요. 반환된 사전은 모듈 수준 함수·클래스 이름을 그 디스크립터에 매핑해요. 중첩된 객체는 부모의 children 사전에 들어가요. readmodule과 마찬가지로 module은 읽을 모듈을 지정하고 pathsys.path 앞에 붙어요. 읽는 모듈이 패키지면 반환된 사전에는 값이 패키지 검색 경로를 담은 리스트인 '__path__' 키가 있어요.

버전 3.7에 추가: 중첩 정의용 디스크립터. 새 children 속성을 통해 접근할 수 있고, 각각 새 parent 속성을 가져요.

이 함수들이 돌려주는 디스크립터는 FunctionClass 클래스의 인스턴스예요. 사용자가 이 클래스들의 인스턴스를 만들 것으로 기대되지는 않아요.

Function 객체

class pyclbr.Function

Function 클래스 인스턴스는 def 문으로 정의된 함수를 설명해요. 다음과 같은 속성을 가져요.

  • file — 함수가 정의된 파일의 이름.
  • module — 설명되는 함수를 정의하는 모듈의 이름.
  • name — 함수의 이름.
  • lineno — 정의가 시작되는 파일의 줄 번호.
  • parent — 최상위 함수는 None. 중첩 함수는 부모. (버전 3.7에 추가.)
  • children — 중첩 함수·클래스의 이름을 디스크립터에 매핑하는 사전. (버전 3.7에 추가.)
  • is_asyncasync 접두사로 정의된 함수는 True, 그 외에는 False. (버전 3.10에 추가.)

Class 객체

class pyclbr.Class

Class 클래스 인스턴스는 class 문으로 정의된 클래스를 설명해요. Function과 같은 속성을 갖고, 두 개가 더 있어요.

  • file — 클래스가 정의된 파일의 이름.
  • module — 설명되는 클래스를 정의하는 모듈의 이름.
  • name — 클래스의 이름.
  • lineno — 정의가 시작되는 파일의 줄 번호.
  • parent — 최상위 클래스는 None. 중첩 클래스는 부모. (버전 3.7에 추가.)
  • children — 중첩 함수·클래스의 이름을 디스크립터에 매핑하는 사전. (버전 3.7에 추가.)
  • super — 설명되는 클래스의 직접 기본 클래스들을 설명하는 Class 객체의 리스트. 슈퍼클래스로 이름이 붙었지만 readmodule_ex()가 발견하지 못하는 클래스는 Class 객체 대신 클래스 이름을 담은 문자열로 나열돼요.
  • methods — 메서드 이름을 줄 번호에 매핑하는 사전. 더 새 children 사전에서 파생할 수 있지만 하위 호환성을 위해 남아 있어요.