2주차가 끝났다. 이번 주는 화요일부터 금요일까지 4일 동안 수업이 진행됐고, 겉으로 보면 지난주에 이어 Python을 더 배우는 시간이었다. 그런데 이번 주를 지나고 나서 남은 감각은 단순히 “문법을 더 익혔다”보다는, 이미 사용해 오던 언어를 더 낮은 단계에서 다시 구조적으로 보기 시작했다 는 쪽에 가깝다. 기본 문법을 다시 훑는 것만으로는 크게 새로울 게 없었다. 대신 이번 주에는 MRO, inheritance, ABC, collections.abc , attribute lookup, namespace, import system, context manager, exception handling, generator, closure, descriptor, metaclass 같은 주제들을 공식 문서와 여러 레퍼런스를 같이 보면서 더 확장적으로 따라갔다. 같은 범위를 공부하더라도 어디까지 낮은 단계에서 이해해 볼지에 따라 완전히 다른 공부가 된다는 걸 다시 느낀 주였다. 특히 이번 주에 좋았던 점 중 하나는, 수업 범위를 벗어나서 다른 걸 많이 했다는 의미보다는 오히려 해당 범위들 내부에서 내가 공부를 더 확장적으로 이어갈 수 있었다 는 점이다. Python을 이미 사용해 왔기 때문에 문법을 다시 외우는 방향보다는, 지금 배우는 범위 안에서 “왜 이렇게 동작하는가”, “이 동작은 어떤 객체 모델 위에서 성립하는가”를 계속 확인하는 방식으로 공부를 가져갈 수 있었다. 이번 주에는 dunder method를 단순히 문법적인 장치로 보는 게 아니라, 어떤 behavior를 어떤 protocol로 제공할 것인가 라는 관점으로 다시 보게 됐다. collections.abc 를 따라가다 보니 iterable/iterator만 따로 떼서 보는 게 아니라 container, hashable, sized 같은 분류까지 같이 보게 됐고, 결국 Python에서는 특정 타입을 엄격하게 선언하는 것보다 어떤 동작을 제공하느냐가 더 중요하다는 점을 다시 ...