[python] 문자열로 그 이름을 가진 속성에 접근하기
Key-Value coding in Python
파이썬에서 키-밸류코딩(문자열을 통해 특정 멤버변수 혹은 로컬변수에 접근)하는 방법에 대해 알아보자.
전역변수 혹은 지역 변수에 대해 문자열로 접근하기
globals()
, locals()
함수는 각각 전역변수와 지역변수의 키-값 쌍을 사전으로 반환한다. 따라서 locals()['someVar']
라고 쓰면 지역변수 someVar의 값을 구할 수 있다. 이 방법은 파이썬2, 파이썬3에서 공통적으로 사용 가능하다.
객체의 속성값(멤버)에 대해 문자열로 접근하기
getattr()
, setattr()
을 사용하면 특정한 객체 내부의 값에 대해 문자열로 접근할 수 있다.
호출 가능한 속성인지 확인하기
파이썬에서는 객체의 속성에 대해 객체인지, 값인지 (파이썬은 상수도 객체로 인식한다.) 혹은 함수인지 (파이썬은 함수도 객체로 인식한다.) 아리송할 때가 있다. 이 때는 callable()
함수를 사용해서 해당 객체를 넣어주면 호출 가능한지 아닌지 알 수 있게 된다. (호출 가능한 속성은 내부적으로 다시 call 함수가 정의되어 있다. 클래스를 정의할 때도 해당 클래스의 call 함수를 정의해두면 클래스 이름을 함수처럼 사용할 수 있다.
def viewAttrs(obj):
for ar in dir(obj):
if callable(getattr(obj,ar)):
print "Callable >> %s : %s\n\n" % (ar, getattr(obj,ar).__doc__)
else:
print "Property >> %s : %s\n\n" % (ar, getattr(obj,ar).__doc__)
위 코드는 특정 객체를 받아, 해당 객체의 모든 속성을 조사하여 실행 가능한지 여부와 함께, 해당 속성의 문서화된 정보를 표시해준다. 참고로 hasattr()도 있고, 이는 당연히 객체가 주어진 이름을 갖는 속성을 가지고 있는지 알아내는 함수이다.더 보기 »[python] 문자열로 그 이름을 가진 속성에 접근하기