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

파이썬 vars() 함수 완벽 가이드: 사용법과 실전 예제

vars() 함수는 파이썬 표준 라이브러리가 제공하는 내장 함수 중 하나로, 특정 객체에 연결된 __dict__ 속성을 콘솔에 반환합니다. 이 함수를 활용하면 객체의 네임스페이스 정보를 사전(dictionary) 형태로 쉽게 확인할 수 있습니다.

기본 문법

vars(object)

반환 타입

<Dictionary Type>

매개변수

vars() 함수는 하나의 매개변수만 받습니다. 매개변수로는 모듈, 클래스 또는 __dict__ 속성을 가진 임의의 객체가 올 수 있습니다.

이 매개변수는 선택 사항입니다. 만약 인자 없이 함수를 호출하면, 현재 지역 심볼 테이블(local symbol table)이 담긴 사전이 반환됩니다.

예외 처리

전달된 인자가 __dict__ 속성과 일치하지 않는 경우, TypeError 예외가 발생합니다.

유효 범위(Scope)

인자 없이 호출된 vars()는 locals() 메서드와 동일하게 동작합니다. locals() 메서드는 현재 존재하는 지역 심볼 테이블을 수정하고 이를 사전 형태로 반환합니다.

동작 원리

클래스가 생성될 때 다음과 같은 과정이 진행됩니다. 클래스 이름은 __name__ 속성과 연결되고, 베이스(base) 클래스들은 튜플 형태로 항목화되어 __bases__ 속성과 연결됩니다. 그리고 클래스 본문에 정의된 내용을 담고 있는 현재 네임스페이스는 표준 사전 타입으로 복사되어 __dict__ 속성으로 표시됩니다.

아래 예제들을 통해 vars() 함수의 개념을 좀 더 구체적으로 살펴보겠습니다.

예제 1: 인스턴스 객체에 적용하기

class test:
    def __init__(self, integer_1=555, integer_2=787):
        self.integer_1 = integer_1
        self.integer_2 = integer_2

obj_test = test()
print(vars(obj_test))

출력 결과

{'integer_1': 555, 'integer_2': 787}

예제 2: 클래스 자체에 적용하기

class sample:
    company = "Tutorial's Point"
    Number = 4
    Topic = "Python 3.x."

obj = vars(sample)
print(obj)

출력 결과

{'__doc__': None, '__weakref__': <attribute '__weakref__' of 'sample' objects>, 'Topic': 'Python 3.x.', 'company': "Tutorial's Point", '__module__': '__main__', 'Number': 4, '__dict__': <attribute '__dict__' of 'sample' objects>}

예제 3: 클래스 내부 함수에서 locals() 활용하기

class test():
    # 파이썬의 __repr__() 함수는 객체의 표현(representation)을 반환합니다.
    # 튜플, 리스트, 딕셔너리, 문자열, 셋 등 유효한 표현식이면 무엇이든 포함할 수 있습니다.
    def __repr__(self):
        return "Tutorial's point"

    def localvariables(self):
        number = 4
        return locals()

if __name__ == "__main__":
    obj = test()
    print(obj.localvariables())

출력 결과

{'self': Tutorial's point, 'number': 4}

예제 해설

첫 번째 예제는 생성자 메서드(__init__)에서 기본값이 설정된 상태로, 클래스의 생성자에 연결된 __dict__ 속성의 활용 방법을 보여줍니다. 인스턴스 변수들이 사전 형태로 출력되는 것을 확인할 수 있습니다.

두 번째 예제는 클래스 자체에 연결된 __dict__ 속성의 사용법을 보여주며, 문서화 문자열(docstring)이 없어 __doc__ 속성이 None으로 출력됩니다. 이처럼 클래스 레벨의 속성들과 함께 __module__, __dict__, __weakref__ 같은 특수 속성들도 함께 반환됩니다.

세 번째 예제는 클래스 내부에 정의된 사용자 정의 함수 안에서, 지역 스코프(local scope)의 변수들과 연결된 __dict__ 속성을 활용하는 방법을 보여줍니다. locals()를 통해 해당 함수의 지역 변수들이 사전으로 반환됩니다.

마무리

이번 글에서는 파이썬 3.x 환경에서 vars() 함수를 다양한 상황에 적용하는 방법을 살펴보았습니다. 인스턴스 객체, 클래스 자체, 그리고 지역 스코프까지 vars() 함수는 유연하게 동작하며, 객체의 내부 구조를 디버깅하거나 동적으로 확인해야 할 때 매우 유용한 도구입니다. 필요할 때 언제든 동일한 패턴으로 vars() 함수를 활용해 보시기 바랍니다.