2013-02-23 5 views
41

파이썬 모듈과 함수를 작성할 때 외부 사용자에게 노출되는 "공용"함수가 있지만 일부만 볼 수있는 "개인"함수가 있습니다. 로컬 및 내부에서 사용됩니다.파이썬 "개인"함수 코딩 규칙

파이썬에는 절대 개인 기능이 없다는 것을 알고 있습니다. 그러나 "공개"기능과 "개인"기능을 구별하는 데 가장 좋고, 가장 깔끔하고, 가장 많이 사용되는 스타일은 무엇입니까? "개인"기능의 이름의 시작 부분에 밑줄의 "공개"기능 (What's the python __all__ module level variable for?)

  • 사용을 표시하는 모듈 파일에

    1. 사용 __all__을 :

      나는 내가 알고있는 스타일 중 몇 가지를 나열

    사람들이 사용하는 다른 아이디어 나 규칙이 있습니까?

    대단히 감사합니다! 파이썬의 Class 모듈 문서에서

  • 답변

    67

    : 파이썬에 존재하지 않는 객체 내부에서 제외 액세스 할 수 없습니다

    개인 "인스턴스 변수. 그러나 대부분의 파이썬 코드 뒤에는 규칙이 있습니다. 밑줄 (예 : _spam)이 접두사로 붙은 이름은 함수, 메소드 또는 데이터 멤버 이건간에 API의 비공개 부분으로 처리되어야합니다. . 구현 세부 사항으로 간주되어야하며 예고없이 변경 될 수 있습니다.

    클래스 전용 멤버에 유효한 유스 케이스가 있으므로 (즉, 하위 클래스로 정의 된 이름과 이름 충돌이 발생하지 않도록), 이름 변환이라는 메커니즘이 제한적으로 지원됩니다. __spam 형식의 식별자 (적어도 두 개의 밑줄이 밑줄)는 _classname__spam으로 텍스트로 대체됩니다. classname은 밑줄이 벗겨진 앞뒤 문자가있는 현재 클래스 이름입니다. 이 mangling은 클래스의 정의 내에서 발생하는 한 식별자의 통어론 적 위치에 상관없이 이루어진다.

    +1

    고마워요! 그래서 사람들은 모듈에서 "public"과 "private"함수를 구별하기 위해 밑줄을 사용합니다. – Kaifei

    +9

    주로. 문서가 말했듯이, 그것은 관습입니다. 공개 된 것처럼 함수에 액세스 할 수는 있지만 실제로 일을하는 "올바른"방법은 실제로 존재하지 않는 것처럼 가장하는 것입니다. –

    +0

    이 규칙은 클래스 기반이 아닌 함수에 적용됩니까? – radtek