파이썬 richrepr 아이디어

지난 번에 string repr과 string print를 로켈에 맞게 수정한 버젼이 pickle같은 몇 가지 곳에서 문제가 발견되어 CVS에 들어갔다가 빠졌는데, 새로운 방법을 여러 모로 생각해 봤지만, 적당한 방법이 생각이 안 나서, 결국은 type object에 tp_richrepr 이라는 메쏘드를 새로 만드는 방법을 한 번 생각해 봤습니다.

파이썬에서 오브젝트가 출력되는 방법은 두 가지인데,

  • PyFile_WriteObject에서 출력하는 오브젝트가 진짜 파일인 경우에는 PyObject_Print로 직접 FILE *fp에다가 출력. PyObject_Print는 재귀적 탐색을 해서 String의 경우에는 PyString_Print가 내부 함수인 string_print를 호출해서 최종적으로 출력하는 데, 이 때에 flags에 Py_PRINT_RAW가 세팅되는 경우에는 그냥 fwrite를 하기 때문에 한글이 제대로 나오는데, 0인 경우에는 한글이 모두 이스케이프되어 버림.

  • PyFile_WriteObject에서 출력하는 오브젝트가 StringIO같은 가짜 파일인 경우에는 PyObject_Repr로 일단 String으로 만든 뒤에 그 녀석을 인자로 해서 출력 오브젝트의 write를 호출.

여기서, 첫번째 방법으로 출력이 되는 경우에는 그다지 어렵지가 않은 것이, Py_PRINT_RICH라는 플래그를 하나 만들어 줘서, 그 녀석을 계속 끝의 flags에 달아 다니다가, PyString_Print와 PyUnicode_Print에서만 적당히 처리해서 뿌려주면 될 것 같습니다.

그런데, 이제 두번째 경우에는 repr()이 호출되어서 PyObject_Repr에 들어온 것인지, 출력하려고 PyObject_Repr에 들어온 것인지 하위 오브젝트들에게 전달해 줄 수 있는 방법이 전혀 없기 때문에, 결국은 새로 오브젝트 프로토콜 메쏘드를 하나 만들어 주는 수 밖에 없는 걸로 보입니다. 그래서, 결국 typedef PyObject *(*richreprfunc)(PyObject *v, const char *encoding); 타입으로 하나 만들어서 typeobject의 제일 끝에 추가하고 PyObject_RichRepr을 PyFile_WriteObject에서 사용하도록 하려고 생각하고 있습니다.

아직은 가능성을 위해서 이것 저것 테스트해 보고 있구요 ~.~; 우선, CJKPython 2.3final에서 표준 2.3과 호환성을 유지하기 위해서는 타입 오브젝트의 크기가 변할 수 없기 때문에, SJIS 패치에서만 그냥 원래 일본식 repr을 쓰고 표준 타입에서는 sys.displayhook만 교체하는 방법을 쓰려고 합니다.

파이썬 2.4에서는 다국어 문제가 말끔히 해결되었으면 좋겠네요. :) 혹시 좋은 아이디어 있으신 분들은 꼭 알려주세요~

14 thoughts on “파이썬 richrepr 아이디어”

  1. 아름다운 섬 제주로의 행복한 여행~~~

    하지만 부담스러운 숙박비와 렌트카 비용 때문에 고민이 많으셨죠?

    이제 더 이상 고민하지 마세요!!!

    20평(거실과 방2개) 의 넓고 깨끗한 숙소와 멋지고 폼나는 차량(썬루프, 사제 오디오 장착)을 1일 8만원 (4인 기준, 비수기)에 함께 제공해 드립니다.

    이 정도 가격이라면 정말 차량은 무료로 이용하는 셈이 되겠죠?

    취사 가능하며, 초고속 인터넷이 가능한 컴퓨터와 케이블 시청이 가능한 TV, 냉장고, 세탁기, 전자 렌지, 전기 밥솥, 등 각종 편의 시설이 비치되어 있으며, 독채로 제공되어 매우 편리합니다.

    숙소는 중문 관광단지 5분 거리, 대형 할인 마트 5분 거리, 서귀포 월드컵 경기장 5분 거리에 위치해 있으며 공항에서 가까운 곳을 원하신다면 그리로 모시겠습니다. (단, 편의 시설 약간 차이 있음)

    원하신다면 제주도 지리와 볼만한 관광지, 맛있는 식당이나 값싸고 질좋은 특산물 등 유용한 정보도 제공해 드리겠습니다.

    400만화소 이상의 디지탈카메라를 보유하고 있어서 멋진 사진도 찍어 드릴 수 있습니다.

    더 궁금한 점이 있으시면 jejuminbak@empal.com 이나 010-5522-5966, 016-502-5700으로 문의 바랍니다.

    친절하게 안내해 드리겠습니다.

    지금 당장 여행 계획이 없으시더라도 사람 일은 모르는 일…

    잘 메모해 두시면 유용하게 쓰일 날이 있을지도 모르죠.

    6인 이상 여행객은 별도 문의 바랍니다. 가능한 최저 가격으로 모시겠습니다.

    마지막으로 싸이트 성격에 맞지 않는 글을 올렸다면 진심으로 죄송하게 생각합니다. 넓은 아량으로 이해해 주시기 바랍니다. 삭제 시 암호는 7777 입니다.

    다시 한번 죄송하다는 말씀 드리며 게시판에 글이 등록되는 것을 원치 않으신다면 위 메일 주소로 귀하의 싸이트 주소를 보내 주시면 다음부터는 게시물이 등록되지 않도록 주의하겠습니다.
    번거롭게 굳이 전화까지 하지 마시고 메일이나 문자메시지 날려 주세요.
    바로 등록거부 조치해 드리겠습니다.

    항상 행복하시고 즐거운 일만 가득하길 바라며 그럼 이만…

  2. 아름다운 섬 제주로의 행복한 여행~~~

    하지만 부담스러운 숙박비와 렌트카 비용 때문에 고민이 많으셨죠?

    이제 더 이상 고민하지 마세요!!!

    20평(거실과 방2개) 의 넓고 깨끗한 숙소와 차량을 1일 13만원 (7인 기준)에 함께 제공해 드립니다.

    이 정도 가격이라면 정말 차량은 무료로 이용하는 셈이 되겠죠?

    취사 가능하며 냉장고, 세탁기 등 각종 편의 시설이 비치되어 있으며, 독채로 제공되어 매우 편리합니다.

    숙소는 중문 관광단지 5분 거리, 대형 할인 마트 5분 거리, 서귀포 월드컵 경기장 5분 거리에 위치해 있으며 공항에서 가까운 곳을 원하신다면 그리로 모시겠습니다.

    원하신다면 제주도 지리와 볼만한 관광지, 맛있는 식당이나 값싸고 질좋은 특산물 등 유용한 정보도 제공해 드리겠습니다.

    400만화소 이상의 디지탈카메라를 보유하고 있어서 멋진 사진도 찍어 드릴 수 있습니다.

    더 궁금한 점이 있으시면 jejuminbak@empal.com 이나 016-502-5700, 010-5500-0087 으로 문의 바랍니다.

    친절하게 안내해 드리겠습니다.

    지금 당장 여행 계획이 없으시더라도 사람 일은 모르는 일…

    잘 메모해 두시면 유용하게 쓰일 날이 있을지도 모르죠.

    4인 이하 여행객은 별도 문의 바랍니다.

    깜짝 놀랄 만큼 저렴한 가격으로 모시겠습니다.

    마지막으로 싸이트 성격에 맞지 않는 글을 올렸다면 진심으로 죄송하게 생각합니다. 넓은 아량으로 이해해 주시기 바랍니다. 삭제 시 암호는 ab7777 입니다.

    다시 한번 죄송하다는 말씀 드리며 게시판에 글이 등록되는 것을 원치 않으신다면 위 메일 주소로 “수신거부” 라는 제목으로 귀하의 싸이트 주소를 보내 주시면 다음부터는 게시물이 등록되지 않도록 주의하겠습니다.
    번거롭게 굳이 전화까지 하지 마시고 메일이나 문자메시지 날려 주세요.
    바로 등록거부 조치해 드리겠습니다.

    항상 행복하시고 즐거운 일만 가득하길 바라며 그럼 이만…

  3. 퍼키군님이 만드신 바깥링크 표시하는 그리스몽키 스크립트 는 바깥 링크를 식별할 수 있어서 좋습니다. 사실 저는 Cooliris를 사용하므로 링크가 있으면 살며시 마우스를 들이댑니다. (그리고 요즘 초상권 무시하면 욕이 아니라는 말 듣지 말입니다. ㅠ.ㅠ) [글보러가기]

  4. wafe// 그리스몽키 아이콘 누르면 스크립트 편집 가능해요. 저도 오른쪽으로 옮겼네요. 아마도 미디어위키 때문일 듯 …

Comments are closed.