- 질문 게시판입니다.
Date 19/11/27 22:07:47
Name   로냐프
Subject   파이썬 코딩 스타일 문의
안녕하세요?
요즘 파이썬으로 간단한 프로그램을 하나 짜고 있는데요.

1) 파이썬의 경우, class 멤버에 대해서 getter/setter를 통하기 보다는 그냥 직접 접근하는게
관례라고 하더군요. class멤버변수를 읽어가기만 하고 수정하는 경우는 없는데,
그래도 그냥 public으로 두는게 나을까요? 아니면 getter만 구현하고 다 숨기는게 나을까요?
setter를 구현하지 않는 경우에도 @property를 쓰는게 더 나을까요?

2) A와 B class는 특정한 struct의 data를 저장하고 처리하는 class이고,
C class는 여러 data를 file에 특정한 format으로 기록하는 class입니다.

그러다보니 C class를 사용하려면 A와 B의 모든 멤버를 다 읽어와야 하고,
A/B class에서 모든 멤버에 대한 getter를 다 구현하고 있는데,
결국 A/B class는 C class에 대해서는 완전히 transparent합니다.
그렇다고, C class를 A class나 B class의 내부에 두기에는
C class자체가 사용자에게 직접 정보를 받는 부분도 많아서,
A.to_C_class(args) 이런식으로 매번 A/B class에 그 인자를 전달하는 method를 추가해야 되는데,
그것도 보기가 별로 안 좋네요.

보통 이런 때는 어떤식으로 구현하게 될까요?

미리 감사합니다~



1


오후다섯시수정됨
1. 파이썬에서는 뭔가를 강제하겠다는 식의 접근은 대개 실패합니다. 오용하기 어렵게 할 수는 있지만 불가능하게는 못 한다. 그래서 정 필요하다면 그 자유를 누려라. 제약보다는 책임있는 사용을 하라. 그게 Pythonic한 거라고 생각합니다. 저라면 일단 변수를 public으로 뒀다가 특수한 제약이 필요해지면 관례에 따라 변수명에 underscore 붙여서 private로 표시한 뒤, property로 getter를 노출시켜서 인터페이스를 유지하여 코드 변경을 최소화할 것 같습니다.

2. 입력 데이터가 될 클래스(A, B등)는 ... 더 보기
1. 파이썬에서는 뭔가를 강제하겠다는 식의 접근은 대개 실패합니다. 오용하기 어렵게 할 수는 있지만 불가능하게는 못 한다. 그래서 정 필요하다면 그 자유를 누려라. 제약보다는 책임있는 사용을 하라. 그게 Pythonic한 거라고 생각합니다. 저라면 일단 변수를 public으로 뒀다가 특수한 제약이 필요해지면 관례에 따라 변수명에 underscore 붙여서 private로 표시한 뒤, property로 getter를 노출시켜서 인터페이스를 유지하여 코드 변경을 최소화할 것 같습니다.

2. 입력 데이터가 될 클래스(A, B등)는 무한히 다양하고, 데이터 출력이 되는 클래스(C)는 유한할 것으로 예상된다면. C가 A, B를 아는 것보다 A와 B가 자신의 정보를 C에 맞게 내어주는 게 아무래도 더 자연스럽겠죠. C클래스에 빌더 패턴을 적용하고, 외부에서 사용자 입력을 통해 절반정도 만들어진 C 빌더를 A.to_C_class()의 인자로 들어가게 하여 A나 B가 그 빌더 패턴에 따라 자신의 입맛에 맞게 C를 완성하도록 하면 좋을 것 같습니다.
2
로냐프
답변 감사합니다. 빌더 패턴를 고려해봐야 겠네요.
1. 가져오기만 한다면 @property가 더 간결하지 않을까요? (만약을 위해 setter를 추가해두고)
2. 유지보수를 생각하면, 의존관계를 고려한 input/output 포맷을 미리 정해놓고, ABC+알파를 독립적으로 만드는게 어떨까요.
transparent한 관계라고 하여도, 각자 다루는 정보의 소스가 다르다면 언젠가 확장/축소/분리의 작업이 발생하기 마련이며, 결국 oop적 접근이 필요할것 같습니다.
2
로냐프
1. 그러게요. 결국 @property를 쓸 것 같습니다.
2. 포맷자체가 자꾸 바뀔 것 같아서요. 그래서 일부러 되도록 미리 정해진 포맷 같은 건 없게 하려고 합니다. oop적으로 더 고민해 볼 필요는 있을 것 같네요. 답변 감사합니다.
목록
번호 제목 이름 날짜 조회 추천
공지 질문 게시판 이용 규정 11 토비 15/06/19 24429 4
16654 IT/컴퓨터현재 데스크탑을 델 미니pc가 대체할 수 있겠죠..? 22 + even&odds 25/04/07 262 0
16653 IT/컴퓨터컴퓨터가 글씨큰모드?로 부팅됩니다 ㅜㅜ 18 even&odds 25/04/07 261 0
16652 의료/건강30대후반 남성 유방암 3기 진단 받았는데 수술을 어디서 해야할까요? 13 [익명] 25/04/06 832 0
16651 게임보드게임을 좋아하는 지인에게 줄 선물 추천 받읍니다. 17 니르바나 25/04/05 331 0
16650 법률건축 법률 질문 4 whenyouinRome... 25/04/04 294 0
16649 의료/건강개별 포장된 약이 유통기한이 지난경우 (홍차넷 약사 스앵님들!!) 22 Mandarin 25/04/03 578 0
16648 교육어린이 신문, 신문, 잡지 추천 부탁드립니다. 17 아재 25/04/02 418 0
16647 IT/컴퓨터AI 모델 추천 부탁드립니다. 11 퍼그 25/04/02 445 0
16646 가정/육아콧물 나는 아이에게 약을 먹이시나요? 12 the 25/04/01 512 0
16645 교육초등학생 학폭위 관련해서 문의 10 얼그레이 25/04/01 744 0
16644 IT/컴퓨터Hongkong/MACAU에서 ChatGPT 쓰는 방법? 3 mathematicgirl 25/04/01 391 0
16643 법률법무법인의 전문성을 비전문가가 알아보려면 어떻게 해야하나요? 16 [익명] 25/04/01 733 0
16642 의료/건강영양제 추천해주십시오 15 쉬군 25/03/31 463 0
16641 기타40대 초중반의 이직 고민, 다른 분들의 생각을 여쭤보고 싶습니다 23 쉬군 25/03/31 797 0
16640 기타빠른년생인 분들 나이 얘기할 때 빠른인 걸 말하시나요? 16 시간아달려라 25/03/30 735 0
16639 IT/컴퓨터KT 와이파이 개수 제한? 2 바쿠 25/03/27 544 0
16638 문화/예술기차역 구조도 그리기 9 OshiN 25/03/27 635 0
16637 댓글잠금 기타세탁기 2번 딸깍이 너무 귀찮아요. 5 [익명] 25/03/25 1054 0
16636 기타쿠팡플레이 질문입니다 4 김치찌개 25/03/25 514 0
16635 가정/육아제사 벌초같은 가족모임 부담스러운거 어떻게 하세요? 4 [익명] 25/03/25 639 0
16634 진로이직할 때 그 회사 이사 자신이 안다고 겁주는데 8 [익명] 25/03/25 945 0
16633 의료/건강면역항암제 주사 or 복용약 고민입니다. 3 미카엘 25/03/25 382 0
16632 기타자영업자분들 뭐하시나요? 14 게이득 25/03/24 869 0
16631 기타시키지 않은 일을 하는 사람이 되고 싶습니다. 10 [익명] 25/03/24 785 0
목록

+ : 최근 2시간내에 달린 댓글
+ : 최근 4시간내에 달린 댓글

댓글
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기