시스템에 파이썬 모듈이 설치되어 있으며 사용할 수있는 기능 / 클래스 / 방법을보고 싶습니다.
각각에 doc 함수를 호출하고 싶습니다. 루비에서는 ClassName.methods와 같은 것을 수행하여 해당 클래스에서 사용할 수있는 모든 메소드 목록을 얻을 수 있습니다. 파이썬에 비슷한 것이 있습니까?
예. 같은 :
from somemodule import foo
print foo.methods # or whatever is the correct method to call
답변
inspect
모듈. 또한 참조 pydoc
모듈은 help()
대화 형 인터프리터와 함수를pydoc
이후의 문서를 생성하는 명령 행 도구를 참조하십시오. 문서를보고 싶은 수업을 주면됩니다. 예를 들어 HTML 출력을 생성하여 디스크에 쓸 수도 있습니다.
답변
사용 dir(module)
가능한 모든 방법 / 속성을 볼 수 있습니다 . PyDocs도 확인하십시오.
답변
import
모듈을 편집 한 후에 는 다음을 수행 할 수 있습니다.
help(modulename)
… 한 번에 모든 기능에 대한 문서를 대화식으로 가져옵니다. 또는 다음을 사용할 수 있습니다.
dir(modulename)
… 모듈에 정의 된 모든 함수와 변수의 이름을 간단히 나열합니다.
답변
inspect 예제 :
from inspect import getmembers, isfunction
from my_project import my_module
functions_list = [o for o in getmembers(my_module) if isfunction(o[1])]
getmembers는 (object_name, object_type) 튜플 목록을 리턴합니다.
inspect 모듈에서 isfunction을 다른 isXXX 기능으로 바꿀 수 있습니다.
답변
import types
import yourmodule
print([getattr(yourmodule, a) for a in dir(yourmodule)
if isinstance(getattr(yourmodule, a), types.FunctionType)])
답변
완벽을 기하기 위해 때로는 코드를 가져 오는 대신 구문 분석 할 수 있음을 지적하고 싶습니다 . 는 최상위 식 import
을 실행 하므로 문제가 될 수 있습니다.
예를 들어, zipapp 로 만든 패키지에 대한 진입 점 기능을 사용자가 선택할 수 있습니다. 타락 코드를 사용 import
하고 inspect
위험을 감수하면 충돌이 발생하고 메시지가 인쇄되는 데 도움이되며 GUI 대화 상자가 나타납니다.
대신 ast 모듈을 사용하여 모든 최상위 기능을 나열합니다.
import ast
import sys
def top_level_functions(body):
return (f for f in body if isinstance(f, ast.FunctionDef))
def parse_ast(filename):
with open(filename, "rt") as file:
return ast.parse(file.read(), filename=filename)
if __name__ == "__main__":
for filename in sys.argv[1:]:
print(filename)
tree = parse_ast(filename)
for func in top_level_functions(tree.body):
print(" %s" % func.name)
이 코드를 list.py
넣고 입력으로 사용하면 다음과 같은 결과를 얻습니다.
$ python list.py list.py
list.py
top_level_functions
parse_ast
물론 AST 탐색은 까다로울 수 있습니다. AST는 수준이 낮기 때문에 Python과 같은 비교적 간단한 언어의 경우에도 마찬가지입니다. 그러나 간단하고 명확한 유스 케이스가 있으면 가능하고 안전합니다.
그러나 단점은와 같이 런타임에 생성되는 함수를 감지 할 수 없다는 것 foo = lambda x,y: x*y
입니다.
답변
구문 분석하지 않으려는 코드의 경우 위의 @csl의 AST 기반 접근 방식을 권장합니다.
다른 모든 경우에는 inspect 모듈이 정확합니다.
import inspect
import <module_to_inspect> as module
functions = inspect.getmembers(module, inspect.isfunction)
이것은 형식의 2 튜플 목록을 제공합니다 [(<name:str>, <value:function>), ...]
.
위의 간단한 답변은 다양한 답변과 의견에 암시되어 있지만 명시 적으로 언급되지 않았습니다.