본문 바로가기
Python/Python FAQ

Python 파이썬 객체가 어떤 메소드를 가지고 있는지 찾기, Finding what methods a Python object has

by 베타코드 2023. 8. 2.
반응형

질문


Python 객체가 주어지면, 이 객체가 가지고 있는 모든 메소드의 목록을 얻는 쉬운 방법이 있을까요?

만약 이게 불가능하다면, 특정 메소드가 있는지 확인하는 쉬운 방법이 있을까요? 메소드를 호출할 때 오류가 발생하는지 확인하는 것 외에 다른 방법이 있을까요?


답변


많은 객체에 대해서, 관심 있는 객체로 'object'를 대체하여 이 코드를 사용할 수 있습니다:

object_methods = [method_name for method_name in dir(object)
                  if callable(getattr(object, method_name))]

이것은 diveintopython.net에서 발견한 것입니다(이제 아카이브되었습니다), 그곳에서 자세한 내용을 확인할 수 있습니다!

AttributeError가 발생하면, 대신 이 코드를 사용할 수 있습니다:

getattr()은 판다스 스타일의 Python 3.6 추상 가상 하위 클래스를 허용하지 않습니다. 이 코드는 위와 동일하게 작동하며 예외를 무시합니다.

import pandas as pd
df = pd.DataFrame([[10, 20, 30], [100, 200, 300]],
                  columns=['foo', 'bar', 'baz'])
def get_methods(object, spacing=20):
  methodList = []
  for method_name in dir(object):
    try:
        if callable(getattr(object, method_name)):
            methodList.append(str(method_name))
    except Exception:
        methodList.append(str(method_name))
  processFunc = (lambda s: ' '.join(s.split())) or (lambda s: s)
  for method in methodList:
    try:
        print(str(method.ljust(spacing)) + ' ' +
              processFunc(str(getattr(object, method).__doc__)[0:90]))
    except Exception:
        print(method.ljust(spacing) + ' ' + ' getattr() failed')

get_methods(df['foo'])
반응형

댓글