파이썬 dir과 help
파이썬에서 dir()과 help()는 객체나 모듈의 정보를 확인할 때 사용하는 탐색 도구입니다.
이들은 디버깅, 문서 확인, 객체 구조 파악 등에서 매우 유용하며, 개발자가 코드 내부 구조를 이해하는 데 도움을 줍니다.
1. dir() 함수
정의
dir()은 객체가 어떤 속성과 메서드를 가지고 있는지를 리스트 형태로 반환합니다.
기본 사용법
dir(대상)
예시 1: 문자열 객체
s = "hello"
print(dir(s))
결과:
'__add__', '__class__', '__contains__', '__delattr__', ... 'capitalize', 'count', 'find', 'lower', 'replace' 등
→ 문자열 객체가 어떤 내장 메서드들을 제공하는지 확인 가능
예시 2: 사용자 정의 클래스
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print(f"안녕하세요, {self.name}입니다.")
p = Person("홍길동")
print(dir(p))
→ __init__, __module__, greet, name 등이 출력됨
2. help() 함수
정의
help()는 객체나 모듈에 대한 **설명서(문서화된 정보)**를 출력합니다.
기본 사용법
help(대상)
예시 1: 문자열 객체에 대한 도움말
help(str)
→ str 클래스에 포함된 메서드, 설명, 예시 등 출력
예: capitalize(), find(), replace() 등의 설명이 자세히 나옴
예시 2: 특정 메서드의 도움말
help(str.upper)
→ 문자열을 대문자로 바꾸는 upper() 메서드의 동작 방식 설명
예시 3: 모듈에 대한 도움말
import math
help(math)
→ math 모듈의 모든 함수, 상수, 설명을 확인 가능
3. dir() vs help()
항목 dir() help()
목적 | 속성과 메서드 이름 목록을 나열함 | 해당 객체나 함수의 설명, 문서 제공 |
출력형식 | 리스트 형태 | 문서 형식의 문자열 출력 |
사용용도 | 탐색, 메서드 목록 확인 | 문서 읽기, 사용법 이해 |
예시 | dir(list), dir(객체) | help(list), help(str.upper), help(module) |
실무 활용 | 디버깅 시 구조 파악, 자동완성 탐색 등 | 함수 기능이 기억나지 않을 때 즉시 설명 확인 |
4. 실전 예시
리스트 관련 함수 확인
data = [1, 2, 3]
print(dir(data))
help(data.append)
출력:
append, extend, pop, remove, sort 등 리스트가 제공하는 메서드 목록
→ append는 리스트의 끝에 요소를 추가하는 함수임을 설명
5. 인터프리터에서의 활용
파이썬 콘솔 또는 Jupyter Notebook에서 자주 사용됨:
>>> dir(int)
>>> help(int)
>>> help(int.bit_length)
→ int형이 제공하는 함수들을 확인하고, 그중 하나의 사용법까지 바로 확인 가능
6. 한 줄 요약
dir()은 어떤 기능이 있는지 목록을 보여주고, help()는 각 기능의 설명을 제공하는 파이썬 내장 탐색 도구이다.
요약 표
함수 설명 반환값/출력 사용 예시
dir() | 객체의 속성과 메서드 이름 목록 | 리스트 | dir(list), dir(object) |
help() | 객체, 함수, 모듈의 설명 출력 | 문자열(도움말) | help(list.append) |
이번에는 dir()과 help()를 실제로 어떻게 활용할 수 있는지, 그리고 동적 분석, 자동 문서화, 코드 탐색 자동화 등 실무 수준에서 확장하는 방법을 설명하겠습니다.
이 내용은 Python 기반의 도구 설계나 교육용 콘텐츠 제작, 라이브러리 분석, 리버스 엔지니어링, API 문서 자동화 등의 업무에서 유용하게 활용됩니다.
7. 실전 활용 예제: 동적 객체 분석기 만들기
dir()과 help()는 단순히 콘솔에서 쓰는 데 그치지 않고, 자동화 도구처럼 코드 내에서 분석에 사용할 수 있습니다.
예제 1: 객체의 메서드 목록만 추출하기
def list_methods(obj):
return [name for name in dir(obj) if callable(getattr(obj, name)) and not name.startswith("__")]
print(list_methods("hello")) # ['capitalize', 'casefold', 'center', ...]
설명:
- dir()로 속성 목록 추출
- getattr(obj, name)으로 해당 속성에 접근
- callable()로 함수인지 판별
- __xxx__ 같은 특수 메서드는 제외
예제 2: 객체의 속성 목록만 추출하기
def list_attributes(obj):
return [name for name in dir(obj) if not callable(getattr(obj, name)) and not name.startswith("__")]
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("홍길동", 30)
print(list_attributes(p)) # ['age', 'name']
설명: 함수가 아닌 데이터 속성만 필터링해서 확인
8. help()를 이용한 자동 문서 추출
help()의 출력은 콘솔 기준이기 때문에 자동화에는 pydoc 모듈을 사용하는 것이 적합합니다.
예제 3: pydoc을 이용한 문서 텍스트 추출
import pydoc
doc = pydoc.render_doc(str.upper, "Help on %s")
print(doc)
또는
from io import StringIO
import sys
def capture_help(obj):
saved = sys.stdout
try:
out = StringIO()
sys.stdout = out
help(obj)
return out.getvalue()
finally:
sys.stdout = saved
print(capture_help(str.upper))
9. 실전 활용: 객체 자동 리포트 생성기
예제 4: 객체의 메서드, 속성, 간략한 설명을 한 번에 출력
def object_report(obj):
print(f"객체 타입: {type(obj)}")
print("\n[속성 목록]")
for attr in list_attributes(obj):
print(f" - {attr} = {getattr(obj, attr)}")
print("\n[메서드 목록]")
for method in list_methods(obj):
print(f" - {method}()")
object_report("예시 문자열")
10. 자동 문서화 시스템 구성
목표
- 입력받은 클래스나 모듈의 기능을 파악
- 그 기능에 대한 문서를 자동 생성
- 최종 결과를 텍스트, HTML, PDF로 변환
필요한 구성 요소
- dir(), getattr()로 내부 구조 탐색
- inspect 모듈로 함수 정의부 및 주석 추출
- pydoc으로 공식 문서화
- jinja2 + pdfkit으로 HTML → PDF 변환
11. 보안 테스트, API 분석, 리버스 엔지니어링 활용
예시: 외부 패키지를 자동 분석
import json
import math
def module_summary(module):
summary = {
"functions": [],
"constants": []
}
for name in dir(module):
attr = getattr(module, name)
if callable(attr):
summary["functions"].append(name)
elif not name.startswith("__"):
summary["constants"].append((name, attr))
return summary
print(json.dumps(module_summary(math), indent=2, ensure_ascii=False))
결과
- 함수 목록: sin, cos, sqrt …
- 상수 목록: pi, e …
12. 교육 콘텐츠 자동 제작 예시
dir()과 help()를 사용해 초급 학습자를 위한 자동 학습 프린트 생성 가능
def generate_learning_material(cls):
print(f"[학습 대상 클래스] {cls.__name__}")
print("\n[사용 가능한 기능]")
for m in list_methods(cls):
print(f" - {m}()")
print("\n[중요 속성]")
for a in list_attributes(cls):
print(f" - {a}")
generate_learning_material(str)
한 줄 요약
dir()은 구조 탐색, help()는 설명 확인용 도구로, 이들을 조합하면 객체의 자동 리포트, 문서화, API 해석 등 고급 자동화가 가능하다.
요약 표
용도 활용 도구 설명
메서드 목록 추출 | dir(), callable() | 객체의 함수만 선별 |
속성 목록 추출 | dir(), not callable | 데이터 속성만 선별 |
공식 문서 확인 | help(), pydoc | 표준 문서 출력 또는 문자열로 캡처 |
자동 문서화 | inspect, jinja2 | API 설명서, 클래스 리포트 생성 |
분석 자동화 | dir(), getattr() | 외부 라이브러리 구조 파악 |
교육용 콘텐츠 자동생성 | list_methods(), help() | 초급 대상 기능 요약 정리 프린트 제작 가능 |
leeoscar.tistory.com