완료됨
메소드 오버라이딩?

제가 문제풀면서 이해한게 맞는지 모르겠는데, 결국 pickle 모듈에서 사용하는 __reduce()__ 메소드를 오버라이딩해서 원하는 객체+인자가 실행되도록 하는건가요??
아니면, 이미 선언된 메소드에 객체+인자를 전달해서 실행시키는 건가요..?

그냥 template injection과 비슷한 느낌이라고 생각하면 될까요?

reduce 메소드가 tuple을 반환할때 호출가능한 객체+인자 인 경우에는 그 결과값을 반환, 아니라면 pickle 되기전 값 그대로 반환

뭐가 맞는지 햇갈리네요..

#web
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
hoppi_
대표 업적 없음
avatar
hoppi_
대표 업적 없음

안녕하세요 lhjlhj님
pickle 모듈의 역직렬화 과정에서는 __reduce__() 메소드가 반환한 값을 기반으로 객체를 복원하는데,
이 메소드를 오버라이딩해서 (호출 가능한 함수, 그 객체에 전달할 인자) 형태의 튜플을 반환하면 역직렬화 시 해당 함수가 실제로 호출됩니다.
template injection과 임의 코드를 실행할 수 있는 느낌을 생각하신 거라면 조금은 비슷하다고 생각할 수 있겠죠?
또한 마지막에 질문 주신 내용이 조금 애매한데 pickle 되기 전 값 그대로 반환 보다는 pickle.loads() 할 때 예외가 발생한다가 맞겠네요.

2025.04.11. 17:19