2021년 1월 17일 일요일

Python vars 도움 되는 명령

Python 에서 알아두면 도움이 되는 명령이 있습니다. 보통 디버깅을 핼때 print 명령으로 변수값을 출력하는 경우가 많습니다.

그러나 해당값이 object 인 경우 아래와 같은 형태로 내용을 볼 수 없는 형태가 되는 경우가 많습니다. 멤버 변수들을 보고 싶은데 말이죠...

print(win)

<pywinauto.application.WindowSpecification object at 0x0000021D38978220>

이런경우 vars 라는 내장함수가 있습니다. vars(변수이름) 이런식으로 해보면 아래와 같이 멤버 변수 정보가 좀 더 많이 나옵니다.

print(vars(win))

{'app': <pywinauto.application.Application object at 0x00000197220B0370>, 'criteria': [{'backend': 'win32', 'app': <pywinauto.application.Application object at 0x00000197220B0370>}], 'actions': <pywinauto.actionlogger._StandardLogger object at 0x0000019723EB9A90>, 'backend': <pywinauto.backend.BackEnd object at 0x0000019723E52130>, 'allow_magic_lookup': True, 'WrapperObject': <function deprecated.<locals>.wrap at 0x0000019723EE7CA0>, 'ChildWindow': <function deprecated.<locals>.wrap at 0x0000019723EE7D30>, 'Exists': <function deprecated.<locals>.wrap at 0x0000019723EE7DC0>, 'Wait': <function deprecated.<locals>.wrap at 0x0000019723EE7E50>, 'WaitNot': <function deprecated.<locals>.wrap at 0x0000019723EE7EE0>, 'PrintControlIdentifiers': <function deprecated.<locals>.wrap at 0x0000019723EE7F70>, 'Window': <function deprecated.<locals>.wrap at 0x0000019723EED040>, 'Window_': <function deprecated.<locals>.wrap at 0x0000019723EED0D0>, 'window_': <function deprecated.<locals>.wrap at 0x0000019723EED160>}

이중에 더 궁금한 내용이 'app'이라면 print(vars(win.app)) 이런식으로 추가 하면 됩니다.

{'process': 4248, 'xmlpath': '', 'match_history': [], 'use_history': False, 'actions': <pywinauto.actionlogger._StandardLogger object at 0x00000214951366D0>, 'backend': <pywinauto.backend.BackEnd object at 0x000002149DD40130>, 'allow_magic_lookup': True, 'Start': <function deprecated.<locals>.wrap at 0x000002149DDD7700>, 'Connect': <function deprecated.<locals>.wrap at 0x000002149DDD7790>, 'CPUUsage': <function deprecated.<locals>.wrap at 0x000002149DDD7820>, 'WaitCPUUsageLower': <function deprecated.<locals>.wrap at 0x000002149DDD78B0>, 'top_window_': <function deprecated.<locals>.wrap at 0x000002149DDD7940>, 'active_': <function deprecated.<locals>.wrap at 0x000002149DDD79D0>, 'Windows_': <function deprecated.<locals>.wrap at 0x000002149DDD7A60>, 'windows_': <function deprecated.<locals>.wrap at 0x000002149DDD7AF0>, 'Window_': <function deprecated.<locals>.wrap at 0x000002149DDD7B80>, 'window_': <function deprecated.<locals>.wrap at 0x000002149DDD7C10>}


그럼 python document 의 var 내용을 살펴보도록 하겠습니다.

vars([object])

모듈, 클래스, 인스턴스 또는 __dict__ 어트리뷰트가 있는 다른 객체의 __dict__ 어트리뷰트를 돌려줍니다.

모듈 및 인스턴스와 같은 객체는 업데이트 가능한 __dict__ 어트리뷰트를 갖습니다; 그러나, 다른 객체는 __dict__ 어트리뷰트에 쓰기 제한을 가질 수 있습니다 (예를 들어, 클래스는 직접적인 딕셔너리 갱신을 방지하기 위해 types.MappingProxyType 를 사용합니다).

인자가 없으면, vars() 는 locals() 처럼 동작합니다. locals 딕셔너리에 대한 변경이 무시되기 때문에 locals 딕셔너리는 읽기에만 유용하다는 것에 주의하세요.

객체가 지정되었지만 __dict__ 어트리뷰트가 없으면 TypeError 예외가 발생합니다 (예를 들어, 해당 클래스가 __slots__ 어트리뷰트를 정의하면).


그렇습니다. vars는 객체의 어트리뷰트를 돌려준다고 합니다. python의 객체의 멤버들은 dict type으로 되어있기 때문에 해당 내용을 볼 수 있습니다.



댓글 없음:

댓글 쓰기