모듈에 대한 파이썬 명명 규칙


102

"nib"라는 클래스를 정의하는 목적을 가진 모듈이 있습니다. (및 몇 가지 관련 클래스도 있습니다.) 모듈 자체를 어떻게 호출해야합니까? "부리"? "nibmodule"? 다른 건 없나요?

답변:


110

그냥 펜촉. 클래스 이름을 Nib (대문자 N)로 지정합니다. 명명 규칙 및 기타 스타일 조언에 대한 자세한 내용 은 Python 스타일 가이드 인 PEP 8을 참조하십시오 .


2
대부분의 Python 프로젝트가이 규칙을 따르나요? 내장 클래스가 소문자 (예 : 목록, 문자열 등)
라는 것을 알기 때문에

4
내장 유형이 올바른지 관찰합니다. 그러나 이것들은 확실히 예외입니다. 표준 라이브러리에 정의 된 대부분의 다른 클래스 대문자로 표시됩니다.
Stephan202

2
나는 이것이 올바른 관습이라고 생각했지만 그것에 내재 된 문제가 있습니다. 적어도 나에게는 그렇게 보입니다. 라는 클래스가 Client있는데, 당연히 내가 호출하고 싶은 인스턴스를 만드는 것이 당연 client합니다. 그러나 관례에 따르면 모듈 이름은 client이므로 항상 인스턴스 이름을 client_instance. 이 문제에 대해 어떻게 생각하십니까?
Ray

3
@Ray 그러나 관례가 모듈의 이름을 지정하는 것이라고 말하면 Client클래스 이름과 충돌 할 것 Client입니다. 가능한 이름 지정 변형 ( client, Client또는 CLIENT) 은 3 개뿐이므로 항상 두 인스턴스, 클래스, 모듈 또는 상수간에 충돌이 발생합니다. 클래스보다 인스턴스 또는 상수와 동일하게 모듈 이름을 지정하는 경우가 적기 때문에 다른 가능성의 명명 규칙이 더 좋습니다. 또한 일반적으로 변수보다는 클래스와 상수를 가져 오기 때문에 모듈에서 가져 오기를 더 읽기 쉽게 만듭니다.
Ted Klein Bergman 2016

2
내장 기능이 소문자 인 이유는 파이썬이 아닌 C로 구현되었음을 암시하기 때문입니다.
Har

41

나는 그것을 nib.py라고 부를 것입니다. 그리고 클래스 이름을 Nib로 지정합니다.

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

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

Java 방식을 에뮬레이트하는 것과 비슷합니다. 파일 당 하나의 클래스. 하지만 유연성이 더 해져서 말이된다면 항상 단일 파일에 다른 클래스를 추가 할 수 있습니다.


27

나는 내 솔루션이 파이썬적인 관점에서 그다지 인기가 없다는 것을 알고 있지만, 하나의 모듈-> 하나의 클래스의 Java 접근 방식을 사용하고 모듈이라는 이름을 클래스로 지정하는 것을 선호합니다. 나는 파이썬 스타일의 이유를 이해하지만 많은 클래스를 포함하는 매우 큰 파일을 갖는 것을 너무 좋아하지 않습니다. 접기에도 불구하고 탐색하기가 어렵습니다.

또 다른 이유는 버전 제어입니다. 큰 파일이 있다는 것은 커밋이 해당 파일에 집중하는 경향이 있다는 것을 의미합니다. 이것은 잠재적으로 해결해야 할 갈등의 양을 증가시킬 수 있습니다. 또한 커밋이 특정 파일을 수정하는 추가 로그 정보를 잃어 버립니다 (따라서 특정 클래스가 포함됨). 대신 어떤 수정이 수행되었는지 이해하기 위해 커밋 주석 만있는 모듈 파일에 대한 수정이 표시됩니다.

요약하면 파이썬 철학을 선호한다면 다른 게시물의 제안으로 이동하십시오. 대신 자바와 같은 철학을 선호한다면 Nib 클래스를 포함하는 Nib.py를 만드십시오.


1
언급 된 문제는 언어 나 프로그래밍 스타일이 아닌 편집기 및 버전 제어 도구 사용의 제한으로 인해 발생합니다. 파일 당 하나의 클래스는 코드 구조에 해를 끼칩니다. spyder또는 유사한 편집기를 사용 하여 탐색을 지원하기 위해 클래스 요약을 확인하고 두 창 모두에서 동일한 파일이 열려있는 두 개의 창을 확인합니다. 또한 PEP8을 읽으십시오. Python은 Python을 작성하고 Java는 Java 를 작성 하지만 Python은 Java 작성을위한 것이 아닙니다 .
Ioannis Filippidis 2015

5
@IoannisFilippidis : 일반적으로 관리하는 코드 크기의 단일 파일에 모듈에 대한 모든 클래스를 넣어야한다면 파일을 열 수도없고 다른 동료와의 충돌이 급증하고 내 상사가 내 그것을 제안하는 얼굴 (비상 적으로, 그게 다입니다). 단일 파일 접근 방식은 PEP-8이든 아니든 확장되지 않습니다.
Stefano Borini 2015

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

22

펜촉은 괜찮습니다. 확실하지 않은 경우 Python 스타일 가이드를 참조하세요.

에서 PEP 8 :

패키지 및 모듈 이름 모듈에는 모두 소문자로 된 짧은 이름이 있어야합니다. 가독성이 향상되면 모듈 이름에 밑줄을 사용할 수 있습니다. Python 패키지에는 밑줄을 사용하지 않는 것이 좋지만 모두 소문자로 된 짧은 이름이 있어야합니다.

모듈 이름은 파일 이름에 매핑되고 일부 파일 시스템은 대소 문자를 구분하지 않고 긴 이름을 자르기 때문에 모듈 이름을 상당히 짧게 선택하는 것이 중요합니다. 이것은 Unix에서는 문제가되지 않지만 문제가 될 수 있습니다. 코드가 이전 Mac 또는 Windows 버전 또는 DOS로 전송 될 때 문제가 발생합니다.

C 또는 C ++로 작성된 확장 모듈에 더 높은 수준 (예 : 더 많은 객체 지향) 인터페이스를 제공하는 Python 모듈이 수반되면 C / C ++ 모듈에는 선행 밑줄 (예 : _socket)이 있습니다.


1
음 ..이게 배를 때렸어요. 나는 완전히 다른 것을 위해 패키지 / 모듈에서 밑줄 접두사를 사용하고 있습니다 (몬티 파이썬 참조 의도).
Stefano Borini

0

에서 PEP-8 패키지 및 모듈 이름 :

모듈 에는 모두 소문자로 된 짧은 이름이 있어야합니다. 가독성이 향상되면 모듈 이름에 밑줄을 사용할 수 있습니다.

Python 패키지 에는 밑줄을 사용하지 않는 것이 좋지만 모두 소문자로 된 짧은 이름이 있어야합니다.

C 또는 C ++로 작성된 확장 모듈 에 더 높은 수준 (예 : 더 많은 객체 지향) 인터페이스를 제공하는 Python 모듈이 수반되면 C / C ++ 모듈에는 선행 밑줄 (예 : _socket)이 있습니다.


-3

파이썬의 foo 모듈 은 Java 의 Foo 클래스 파일 과 동일합니다.

또는

파이썬의 foobar 모듈 은 Java 의 FooBar 클래스 파일 과 동일합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.