Show HN: Wat – Python 객체의 심층 검사
(github.com/igrek51)- 
🙀 WAT Inspector
- Python 객체를 깊이 검사하는 도구
 - WAT는 런타임에 알 수 없는 객체를 조사할 수 있는 강력한 검사 도구
 - "Wat"는 혼란이나 혐오를 표현할 때 자주 사용되는 영어 단어 "what"의 변형
 - Python 콘솔에서 
wat / object를 실행하여 객체의 타입, 형식화된 값, 변수, 메서드, 부모 타입, 서명, 문서화, 소스 코드 등을 조사할 수 있음 - 
wat(object)구문도 사용 가능 
 - 
Import
- 
Insta-Load
- 설치 없이 동일 세션에서 이 검사 도구를 빠르게 로드할 수 있음
 - Python 인터프리터에 다음 스니펫을 붙여넣기:
import base64, zlib code = b'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' exec(zlib.decompress(base64.b64decode(code)).decode(), globals()) - 이제 
wat객체를 사용할 수 있음 - 경고: Insta-Load 스니펫을 실행하기 전에 실행할 내용을 확인하는 것이 좋음
- 추출된 코드의 내용을 미리 확인:
print(zlib.decompress(base64.b64decode(code)).decode()) - 
inspection.py의 내용을 인터프리터에 붙여넣기 - pip으로 패키지를 설치하고 코드를 검토
 
 - 추출된 코드의 내용을 미리 확인:
 
 - 
Install with pip
- 
wat-inspector 패키지를 설치하고 wat 모듈에서 검사 도구를 가져오기:
pip install wat-inspector import wat 
 - 
wat-inspector 패키지를 설치하고 wat 모듈에서 검사 도구를 가져오기:
 
 - 
 - 
Usage & modifiers
- 
wat객체는 괄호 없이 빠르게 입력할 수 있는/연산자를 사용하여 객체를 빠르게 검사할 수 있음 - 
wat / object는wat(object)와 동일 - 다음 수정자를 사용하여 
wat.modifiers / object(또는wat.modifiers(object))를 호출할 수 있음:- 
.short또는.s: 속성(변수 및 메서드)을 숨김 - 
.long: 축약되지 않은 값과 문서화를 표시 - 
.dunder: 던더 속성을 표시 - 
.code: 함수, 메서드 또는 클래스의 소스 코드를 표시 - 
.nodocs: 함수 및 클래스의 문서화를 숨김 - 
.all: 사용 가능한 모든 정보를 포함 
 - 
 - 수정자를 체인으로 연결 가능, 예: 
wat.long.dunder.nodocs / object - 
wat.locals또는wat()를 호출하여locals()변수를 검사 - 
wat.globals를 호출하여globals()변수를 검사 - 인터프리터에서 
wat를 입력하여 이 객체에 대해 더 알아보기 
 - 
 - 
Use Cases Examples
- 
Determine type
- Python과 같은 동적 타이핑 언어에서는 객체의 타입을 결정하기 어려움
 - WAT Inspector는 객체의 타입 이름과 모듈을 표시하여 도움을 줄 수 있음
>>> wat.short / (1,) value: (1,) type: tuple len: 1 >>> 
 
 - 
 
Hacker News 의견
- 
Waaat :D. 이 도구가 정말 좋음. 예전에 python-ls를 사용했지만 더 이상 유지되지 않음. snoop과 pdbpp를 주로 사용하며, wat에 ipy 위젯이 추가되면 좋겠음
- base64 exec 해킹을 처음 알게 되었으며, 앞으로 사용할 예정임
 
 - 
이 도구가 재미있어 보임. Python에서 "dir"을 자주 사용하며, 공식 문서보다 유용할 때가 있음
- Python의 인터랙티브 셸에 대한 혁신과 새로운 도구가 더 많지 않다는 것에 놀람
 
 - 
이런 종류의 도구는 유용함
- 20년 전 Zope를 위한 객체 인트로스펙터를 작성했음
 - 현재는 devtools를 매일 사용하고, icecream과 q를 가끔 사용함. wat을 시도해 볼 예정임
 
 - 
$PYTHONSTARTUP 파일에 다음 코드를 추가하면 번거로운 import를 피할 수 있음
try: from wat import wat except ImportError: pass - 
wat은 icecream의 멋진 버전처럼 보임
- icecream에 대해 들어본 적이 없다면, 아래 링크를 참조
 - https://github.com/gruns/icecream#icecream-in-other-language...
 
 - 
wat 프로젝트가 멋진데, "import wat"와 같은 간단한 사용법을 제공하지 않는 것이 놀라움
- 사용자들이 wat/wat을 시도해 보도록 유도할 수 있음
 
 - 
Python의 가장 큰 약점은 변수가 어떻게 생겼는지 정확히 보여주는 함수가 없다는 것임
- PHP의 var_dump는 매우 유용함. wat도 최고의 도구 중 하나로 보임
 
 - 
wat 모듈은 Python 표준 라이브러리의 inspect 모듈을 사용하여 기능을 제공함
- inspection.py 파일의 2번째 줄에 "import inspect as std_inspect"가 있음
 
 - 
이 도구는 Python을 배울 때 큰 도움이 되었을 것임
- 언어를 배우기 위해 내부에서 무슨 일이 일어나는지 보는 것이 중요함
 - 기본 Python 디버깅은 실망스러움
 - 대신 pry를 설치하고 Ruby 팬이 되었지만, wat 덕분에 다시 시도해 볼 수 있음
 
 - 
Lua에도 이런 도구가 있는지 궁금함
- Lua는 Python의 
help()와 같은 내장 인트로스펙션 기능이 없음 
 - Lua는 Python의