2009-04-02 13 views
78

"nib"라는 클래스를 정의하는 것이 목적입니다. (그리고 몇 가지 관련 클래스들도 있습니다.) 모듈 자체를 어떻게 호출해야합니까? "부리"? "nibmodule"? 다른 건 없니?모듈에 대한 Python 명명 규칙

답변

95

그냥 펜촉. 명명 규칙 및 기타 스타일 조언에 대한 자세한 내용은 Python 스타일 가이드 PEP 8을 참조하십시오.

+2

대부분의 Python 프로젝트가이 규칙을 따르고 있습니까? 내장 클래스는 소문자로되어 있으므로 목록, 문자열 등 –

+4

당신 관찰 w.r.t. build-in 유형이 정확합니다. 그러나 이것은 분명히 예외입니다. 표준 라이브러리 *에 정의 된 대부분의 다른 클래스는 대문자가됩니다. – Stephan202

+2

이것이 올바른 컨벤션이라고 생각했지만, 내재적 인 문제가 있습니다. "Client"라는 클래스가 있다고 가정 해 봅시다. 이해할 수있게 말하자면, 저는 종종 그 클래스의 인스턴스를 만들고 "client"를 호출하려고합니다. 하지만 귀하의 관습에 따르면 모듈 이름은'client'가 될 것이므로 항상 인스턴스 이름을 'client_instance'와 같이 부 자연스럽게해야합니다. 이 문제에 대해 어떻게 생각하십니까? – Ray

34

저는 이것을 nib.py라고 부릅니다. 그리고 또한 Nib 클래스를 명명 할 것입니다.

우리가 작업하고있는 더 큰 파이썬 프로젝트에서 우리는 기본적으로 하나의 중요한 클래스를 정의하는 많은 모듈을 가지고 있습니다. 클래스의 이름은 대문자로 시작합니다. 모듈 이름은 소문자로 된 클래스와 같습니다. 이로 인해 다음과 같은 수입이 발생합니다.

from nib import Nib 
from foo import Foo 
from spam.eggs import Eggs, FriedEggs 

Java 방식을 모방하는 것과 같습니다. 파일 당 하나의 클래스. 그러나 융통성이 추가되면 합리적인 경우에는 하나의 파일에 다른 클래스를 추가 할 수 있습니다.

21

겨자입니다. 의심 스럽다면 파이썬 스타일 가이드를 참조하십시오. PEP 8에서

:

패키지 및 모듈 이름 모듈 짧은, 모두 소문자로 이름이 있어야합니다. 가독성을 높이려면 모듈 이름에 밑줄을 사용하여 을 사용할 수 있습니다. 파이썬 패키지의 경우 은 모두 밑줄이 붙지 않지만 모두 짧은 소문자 이름을 사용해야합니다. .

모듈 이름이 파일 이름을 매핑, 일부 파일 시스템이 대소 문자를 구분하고 긴 이름을자를 수 있습니다 때문에,이 모듈 이름이 매우 짧은 것으로 선택하는 것이 중요하다 - 이것은 유닉스에 문제가되지 않습니다 , 이지만 이전 Mac이나 Windows 버전 또는 DOS로 코드를 전송할 때 문제가 될 수 있습니다.

C 또는 C++로 작성된 연장 모듈은, 상위 레벨을 제공하는 첨부 파이썬 모듈을 갖는 경우 (예를 들어 더 객체 지향) 인터페이스는 C/C++ 모듈은 밑줄을 갖는다 (예컨대 _socket).

+1

uhm ... 이것은 위장에 나를 때린다. 패키지/모듈의 밑줄 접두어를 완전히 다른 것으로 사용하고 있습니다 (몬티 파이썬 참조). –

25

나는 내 솔루션은보기의 파이썬 점에서 매우 인기가 아니라는 것을 알고,하지만 난 클래스로 명명 된 모듈을 하나의 모듈 -> 하나 개의 클래스의 자바 방법을 사용하는 것을 선호합니다. 파이썬 스타일 뒤에있는 이유를 이해하지만 많은 클래스가 포함 된 매우 큰 파일을 너무 좋아하지 않습니다. 접기에도 불구하고 탐색하기가 어렵습니다.

또 다른 이유는 버전 제어입니다. 파일 크기가 커지면 커밋이 해당 파일에 집중하는 경향이 있습니다. 이로 인해 잠재적으로 더 많은 양의 충돌이 해결 될 수 있습니다. 또한 커밋이 특정 파일을 수정 (따라서 특정 클래스 포함)하는 추가 로그 정보를 잃어 버리게됩니다. 대신 모듈 파일을 수정하여 커밋 주석만으로 수정 내용을 이해할 수 있습니다.

요약하면, 파이썬 철학을 선호한다면, 다른 글의 제안을 찾으십시오. Java와 같은 철학을 선호한다면, Nib.py 클래스를 포함하는 Nib 클래스를 생성하십시오.

+1

언급 된 문제는 편집기 또는 언어 또는 프로그래밍 스타일이 아닌 버전 제어 도구 사용의 제한 때문에 발생합니다. 파일 당 하나의 클래스는 코드 구조에 해가됩니다. 'spyder' 또는 유사한 편집기를 사용하여 탐색을 돕기위한 클래스의 요약을보고, 같은 파일이있는 두 개의 창을 모두 열어보십시오. 또한, PEP8을 읽으십시오. Python은 Python과 Java for Java를 작성하기위한 것이지만 Python은 Java를 작성하기위한 것이 아닙니다. –

+4

@IoannisFilippidis : 모듈의 모든 클래스를 일반적으로 관리하는 코드 크기의 단일 파일에 넣어야 만 파일을 열지 못하고 다른 동료와의 충돌이 급증하여 내 상사가 침을 뱉었습니다. 그것을 제안하기위한 나의 얼굴 (비 유적으로, 그것이 그 것이다). 단일 파일 방식은 확장되지 않으며 PEP-8 또는 확장되지 않습니다. –

+0

@StefanoBorini : PEP8은 단일 파일 방식을 요구하지 않습니다. 모듈 당 하나의 클래스와 (코드 단위) 당 하나의 파일은 매우 넓은 스펙트럼의 두 극단입니다. 관리 할 수 ​​없을 정도로 큰 파일 크기가 모듈 당 하나의 파일로 표시되는 경우 패키지를 모듈로 분리하는 방법을 수정해야합니다. –

0

foo는 파이썬에서 모듈은

또는

는 foobar 파이썬에서 모듈의 FOOBAR 클래스 파일에 해당하는 것입니다 자바에서 클래스 파일에 해당하는 것 Java