2017-11-13 8 views
1

메소드 meth()를 구현해야하는 클래스 A가 있습니다. 이제 패키지의 최종 사용자가이 메서드를 호출하는 것을 원하지 않습니다. 따라서이 메소드를 private (예 : _meth())로 설정해야합니다. 실제로는 개인이 아니지만 컨벤션이 중요하다는 것을 알고 있습니다.공용 사용을위한 파이썬 개인 메소드

문제는 패키지에 다른 클래스 B가 있어야한다는 것입니다. 그 메서드 _meth()를 호출하십시오. 문제는 B가 클래스의 보호 된 메서드에 액세스하려고한다는 경고 메서드가 생겼다는 것입니다. 따라서 메소드를 public으로 만들어야합니다. 즉, 앞에 밑줄을 쓰지 않아야합니다. 이것은 내 의도와 모순된다.

이 딜레마를 해결하는 가장 무난한 방법은 무엇입니까? 메타로() 같은 문제로 이어질 것입니다, (A)의 개인 속성을 사용


  • 나는 내가 밖에서 그 방법을 다시 구현할 수 있습니다 알고 있지만, 코드 중복으로 이어질 것입니다.

  • 하나의 메타 클래스를 상속하는 것은 완전히 다른 목적을 가지고 있으며 무시 무시한 혼란에 기여할 수 있기 때문에 옵션이 아닙니다.

+0

클래스 A의 객체를 클래스 B에 만들거나 전달할 수 있습니까? –

+2

아마 편집기에서 경고 메시지가 표시되지만 어쨌든이 메서드를 호출 할 수 있습니다. – Matthias

+0

@DeepSpace 필자는 그것에 대해 생각했지만 최종 사용자는 공용 래퍼 자체를 호출 할 수 있습니다. –

답변

2

필림트/편집자/외부 도구가 경고를 표시한다는 사실은 코드 실행을 방해하지 않습니다. 나는 당신의 편집자에 관해서는 모르지만 필경 경고문 can be disabled on a case-by-case basis using special comments (nb : "case by case"의미 : " 줄 또는 블록"을 경고하지 말 것. "이 경고를 완전히 비활성화하지 말 것").

그리고 그것은 같은 패키지에 보호 속성과 메소드에 액세스 할 수있는 자신의 코드에 완벽하게 괜찮아요 -은 "_protected"명명 규칙은 "아무도 통과 할 수 없다"의미하지 않는다, 다만 " '당신은 당신이 당신이 무엇을 이해할 수있다 당신이 무언가를 망가 뜨리면 책임감을 가지고 기꺼이하고 있습니까? " 당신이 패키지의 저자이자 관리자이며 패키지 내 액세스 인 경우이 책임을 맡을 자격이 분명합니다.)

+0

나는 그것을 알고 있지만 여전히 내 충돌의 문제를 해결하여 편집자의 오른쪽 탭에 성공, 그리고 보라색 경고 기호 아닙니다. –

+0

@AntonBohdanov 그러면 에디터가 어떤 린터를 사용하는지 알게 될 것이고 그래서 당신이하고있는 일을 알고 있다고 말할 수 있습니다. –

+0

난 여전히 문제를 해결하고 그냥 경고를 해제하고 싶습니다 –