내가 하던 짓 :
엑셀 작업을 반복적으로 처리해야 할 일이 생겼는데
엑셀의 자체 매크로 기능을 사용하기엔 한계점이 많다보니
해당 작업을 파이썬으로 진행해보려고 openpyxl을 사용해보던 중이었다.
위의 사진 설명 :
엑셀 파일을 wb(workbook)이라는 변수명으로 open한 뒤,
wb 중에서 active sheet를 ws(worksheet)라는 변수명으로 담았다.
wb.active로 ws를 만들었을 때에나, wb['작업할 시트 이름']으로 불러올 때에나
둘 다 type()을 찍어보면 아래의 사진처럼 같은 클래스라는 것을 알 수 있었다.
openpyxl.워크시트.워크시트.워크시트...
PyCharm과 같은 IDE에서 ws.를 입력했을 때 사용 가능한 객체의 메서드들이 나오는 것
(들을 줄여서 type hinting이라고 한다)
들을 한 번에 볼 수 있는 (built-in 함수) dir()도 있었다.
근데 불편하다. 언제 그걸 하나하나 print(dir(o))를 찍어보고 앉아있는가..
대체 왜 wb.active와 wb['작업할 시트 이름']의 반환 객체는 같은데
하나는 type hinting이 뜨고, 다른 하나는 뜨지 않는걸까.
+ 여담으로, wb.get_sheet_by_name() 메서드도 사용 가능했지만
DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
--> 당신이 쓰는건 낡은 방식이니까 새로운 방식을 사용하라는 권고문
이라는 권고 아닌 경고문이 뜨다 보니.. 편하게 딕셔너리처럼 다루는 방식을 차용했다.
1. 그래서 패키지를 뜯어보았다.
빨간색 밑줄 친 부분을 파이썬에선 DocString이라고 부른다.
wb.active는 자체적으로 docstring에서 타입을 지정해주고 있었다.
하지만 딕셔너리처럼 직관적이게 불러오는 방식에선
해당 타입을 지정해주지 못해서 관련 메서드를 확인할 수 없었던 것이었다.
2. 그럼 손가락 빨고 지켜봐야 하는가? No!!
이 불편한 사태를 지켜봐야 하는가?
그래서 방법이 있다.
PyCharm의 공식 문서에 따르면
해당 엘리먼트에 대고 'Alt + Enter'를 눌러서 Add type hint for를 선택해서
수동으로 타입을 지정해주면 된다고 한다.
문법은 위의 사진처럼
ws: 뒤에 해당 클래스를 지정해주는 방식으로 사용하면 된다.
해당 클래스를 찾아 들어가는 경로가 좀 다른데
(type을 출력했을 땐 openpyxl.worksheet.worksheet.Worksheet 였지만
위의 사진은 openpyxl.workbook.workbook.Worksheet 으로 적었다.)
결과적으론 Worksheet라는 클래스를 사용한다는 점이 같기 때문에
크게 신경쓰지 않아도 된다.
3. 잡담
사실 이 문제를 굉장히 오래 고민해왔다.
numpy나 pandas, PIL 등
다른 패키지를 사용하면서도 겪었던 저 type hint가 뜨지 않았던 문제로 인해
documents를 정독해가며 작업 코드를 만드는게 번거로웠기 때문..
근데 의외로 간단한 문법으로 해당 문제를 해결했다.
작업을 편리하게 진행할 수 있도록 도와주는 type hinting
적극적으로 활용해보자.
댓글 없음:
댓글 쓰기