Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 클래스에 정의된 함수(메서드) 목록 확인하는 방법

Python 클래스의 함수(메서드) 목록 열거하기

Python으로 개발하다 보면 특정 클래스 내부에 어떤 함수(메서드)들이 정의되어 있는지 한눈에 확인하고 싶을 때가 있습니다. 이럴 때 표준 라이브러리의 inspect 모듈을 사용하면 아주 간단하게 해결할 수 있습니다.

inspect.getmembers() 함수는 객체가 가진 멤버를 (이름, 값) 형태의 튜플 리스트로 반환해 줍니다. 여기에 predicate 인자로 inspect.ismethod를 전달하면 메서드만 골라서 필터링할 수 있습니다.

예제 코드

class foo:
    def __init__(self):
        self.x = x

    def bar(self):
        pass

    def baz(self):
        pass

import inspect
print(inspect.getmembers(foo, predicate=inspect.ismethod))

실행 결과

[('__init__', <unbound method foo.__init__>), ('bar', <unbound method foo.bar>), ('baz', <unbound method foo.baz>)]

출력 결과를 보면 클래스에 정의된 __init__, bar, baz 세 개의 메서드가 이름과 함께 순서대로 나열된 것을 확인할 수 있습니다.

참고: dir() 함수를 활용한 대체 방법

내장 함수인 dir()을 사용해서도 클래스의 멤버 목록을 얻을 수 있습니다. 다만 상속받은 내장 속성까지 모두 포함되기 때문에 원하는 결과만 얻으려면 추가로 필터링 작업이 필요합니다.

[m for m in dir(foo) if callable(getattr(foo, m)) and not m.startswith('__')]

반면 inspect.getmembers()는 predicate 조건 하나로 원하는 종류의 멤버만 깔끔하게 추출할 수 있어 훨씬 편리합니다. 참고로 Python 3 환경에서는 클래스 본문에 정의된 일반 함수까지 함께 확인하려면 inspect.isfunction을 조건으로 사용하는 것도 좋은 방법입니다.