Python 클래스 파일 이름도 camelCase로 해야 합니까?
Python의 클래스는 일반적으로 camelCase를 사용하여 케이스화되는 것으로 알고 있습니다.
클래스를 포함하는 파일도 camelCase'로 하는 것이 일반적인 관례입니까? 특히 파일에 클래스만 포함되어 있는 경우에는?
를 들어, class 를들어, should classclassName
에도 됩니다.className.py
에 class_name.py
?
다음 답변은 주로 이 답변에서 비롯됩니다.
PEP 8을 따르려면 모두 소문자 이름과 밑줄(선택 사항)을 사용해야 합니다.
패키지 및 모듈에 대한 PEP 8의 명명 규칙 인용하기
모듈의 이름은 모두 소문자여야 합니다.가독성이 향상된 경우 모듈 이름에 밑줄을 사용할 수 있습니다.
수업의 경우:
클래스 이름은 일반적으로 CapWords 규칙을 사용해야 합니다.
모듈, 클래스 및 패키지의 차이점은 다음 답변을 참조하십시오.
Python 모듈은 클래스, 함수 및 글로벌 변수를 노출할 수 있는 Python 소스 파일일 뿐입니다.
공식적인 규칙은 파일 이름에 모든 소문자를 사용하는 것입니다(다른 사람들이 이미 언급했듯이).하지만 그 이유는 언급되지 않았습니다...
Python은 크로스 플랫폼(그리고 그런 방식으로 사용하는 것이 일반적)으로 작동하지만 파일 시스템은 케이스의 용도가 다양하기 때문에 대체 사례를 제거하는 것이 좋습니다.예를 들어 Linux에서는 MyClass.py 과 myclass.py 을 동일한 디렉토리에 둘 수 있습니다.Windows에서는 그렇지 않습니다!
이와 관련하여 MyClass.py 와 myclass.py 가 Git repo에 있거나 동일한 파일의 케이스를 변경하는 경우 Linux 및 Windows에서 마우스를 누르거나 누르면 Git이 펑키하게 작동할 수 있습니다.
SQL은 거의 주제를 다루지 않았지만, 같은 맥락에서 서로 다른 표준 및 구성이 테이블 이름에 UpperCases를 허용하거나 허용하지 않을 수 있는 동일한 문제를 가지고 있습니다.
저는 개인적으로 파일 이름에서도 제목 케이싱/카멜 케이싱을 읽는 것이 더 즐겁다고 생각하지만, 플랫폼 간에 작동할 수 있는 모든 것을 할 때는 그러지 않는 것이 가장 안전합니다.
클래스 이름과 이 클래스를 포함하는 파일의 명명 규칙에 차이가 있습니다.이러한 오해는 클래스당 하나의 파일을 갖는 것이 일반적인 Java와 같은 언어에서 발생할 수 있습니다.
파이썬에서는 모듈당 여러 클래스(단순한 .py 파일)를 가질 수 있습니다.이 모듈/파일의 클래스는 클래스 명명 규칙에 따라 호출해야 합니다.클래스 이름은 일반적으로 CapWords 규칙을 사용해야 합니다.이 클래스를 포함하는 파일은 모듈 명명 규칙을 따라야 합니다.모듈의 이름은 모두 소문자여야 합니다.가독성이 향상된 경우 모듈 이름에 밑줄을 사용할 수 있습니다.
=> CamelCase는 camelcase.py 파일에 있어야 합니다(또는 필요한 경우 camel_case.py).
제 질문은 클래스가 포함된 파일도 camelCase'로 하는 것이 일반적인 관례인가요? 특히 파일에 클래스만 포함된 경우에는
단답: 아니요.
긴 답변: 필요에 따라 모두 소문자와 밑줄이어야 합니다.
모듈의 이름은 모두 소문자여야 합니다.가독성이 향상된 경우 모듈 이름에 밑줄을 사용할 수 있습니다.또한 Python 패키지는 모두 소문자로 된 짧은 이름을 사용해야 하지만 밑줄은 사용하지 않습니다.
모듈이 무엇인지 모르는 경우:
모듈은 Python 정의 및 문을 포함하는 파일입니다.파일 이름은 접미사 .py가 추가된 모듈 이름입니다.
먼저, 위에서 언급한 바와 같이 클래스 이름은 CapWords여야 합니다. 예:
class SampleClass:
...
주의: 파일(모듈)과 클래스의 이름이 같을 경우 혼란이 발생합니다.
예 1: 다음과 같은 모듈 구조를 가지고 있다고 가정합니다.
src/
__init__.py
SampleClass.py
main.py
당신의.SampleClass.py
다음과 같습니다.
class SampleClass:
...
당신의.main.py
다음과 같습니다.
from src import SampleClass
instance = SampleClass()
이 코드가 작동할까요?아니요, 당신은 어느 쪽이든 했어야 했어요.from src.SampleClass import SampleClass
또는instance = SampleClass.SampleClass()
어색한 코드죠, 그렇죠?
다내을추수수정있도다습니할에 다음 .__init__.py
:
from .SampleClass import SampleClass
이는 예제 2로 이어집니다.
예 2: 모듈을 개발한다고 가정합니다.
src/
__init__.py
BaseClass.py
ConcreteClass.py
main.py
BaseClass.py
내용:
class BaseClass:
...
ConcreteClass.py
내용:
from src import BaseClass
class ConcreteClass(BaseClass):
...
그리고 당신의__init__.py
내용:
from .ConcreteClass import ConcreteClass
from .BaseClass import BaseClass
그리고.main.py
내용:
from src import ConcreteClass
instance = ConcreteClass()
코드가 실패하고 다음 오류가 발생합니다.
class ConcreteClass(BaseClass):
TypeError: module() takes at most 2 arguments (3 given)
오류와 클래스에서 상속할 수 없는 이유를 이해하는 데 시간이 걸렸습니다. 이전 예제에서는 내보내기를 추가했습니다.__init__.py
모든 작업을 파일로 정리합니다.스네이크 케이스 파일 이름을 사용하면 문제가 해결되지 않지만 오류를 조금 더 쉽게 이해할 수 있습니다.
ImportError: cannot import name 'BaseClass' from partially initialized module 'src'
하려면 가져기를데필코드수에서 .ConcreteClass.py
대상:from .BaseClass import BaseClass
.
마지막 주의, 원래 코드에서 가져오기 위치를 전환할 경우__init__.py
그래서 다음과 같이 보입니다.
from .BaseClass import BaseClass
from .ConcreteClass import ConcreteClass
초기 코드는 작동하지만, 가져오기 순서에 따라 다른 사람이 코드를 작성하는 것을 원하지 않습니다.다른 사용자가 주문을 변경하거나 신청하는 경우isort
가져오기를 구성하는 도구, 이러한 버그를 수정하는 데 행운을 빕니다.
사용 중인 IDE에 따라 규약이 변경될 수 있습니다.나는 Visual Studio Code를 사용하고 있으며, 내가 말한 오류는 다음과 같습니다.Module name "[file name]" doesn't conform to snake_case naming
snake_case는 모든 공백이 밑줄로 대체된 모든 소문자를 의미합니다.PEP 8에서는 원하는 경우 모든 소문자와 때때로 밑줄을 사용하도록 되어 있지만 Vsc에서는 모든 밑줄에 모든 소문자를 사용하도록 되어 있습니다.그래서 제 생각에는 다를 수도 있을 것 같아요.
언급URL : https://stackoverflow.com/questions/42127593/should-python-class-filenames-also-be-camelcased
'programing' 카테고리의 다른 글
numpy 배열에서 모든 NaN 값의 인덱스 목록을 가져오는 방법은 무엇입니까? (0) | 2023.07.24 |
---|---|
ini_set('max_execution_time', 0)이 나쁜 생각입니까? (0) | 2023.07.24 |
R에서 "<-"(범위 지정)을 어떻게 사용합니까? (0) | 2023.07.19 |
Python에서 두 목록이 순환적으로 동일한지 확인하는 방법 (0) | 2023.07.19 |
부분 문자열 형식 지정 (0) | 2023.07.19 |