반응형
질문
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'])
반응형
댓글