IT & Programming/python

파이썬 dir과 help

오스카리 2025. 5. 19. 03:30

파이썬에서 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

 

반응형