17.11 디버깅
프로그램을 실행하는 모든 지점에서 객체에 속성을 추가할 수 있지만, 타입은 같지만 속성이 다른 객체를 갖고 있다면 실수하기 쉽다. 따라서 _ _init_ _ 메서드에서 객체의 속성을 모두 초기화하는 것이 좋다.
객체에 특정 속성이 있는지 확실하지 않다면 내장 함수 hasattr을 사용할 수 있다(262쪽의 15.7 디버깅 참조).
속성에 접근하는 다른 방법으로는 내장 함수 vars가 있다. vars는 객체를 받아서 속성 이름(문자열)과 값을 연결한 사전을 반환한다.
>>> p = Point(3, 4)
>>> vars(p)
{'y': 4, 'x': 3}
디버깅 목적이라면 다음 함수가 유용할 것이다.
def print_attributes(obj):
for attr in vars(obj):
print(attr, getattr(obj, attr))
print_attributes는 사전을 순회하면서 각 속성의 이름과 값을 출력한다.
내장 함수 getattr은 객체와 속성 이름(문자열)을 받아서 속성의 값을 반환한다.