문제

나는 일반적으로 수업 당 하나의 파일을 만든 배경에서 왔습니다. 나는 디렉토리에서도 공통 수업을 조직합니다. 이 관행은 나에게 직관적이며 C ++, PHP, Javasript 등에 효과적인 것으로 입증되었습니다.

이 은유를 Python으로 가져 오는 데 어려움이 있습니다. 파일은 더 이상 파일이 아니라 공식 모듈입니다. 모듈에 하나의 클래스를 갖는 것은 옳지 않은 것 같습니다 .-- 대부분의 클래스는 그 자체로 쓸모가 없습니다. 내가있는 경우 automobile.py 그리고 Automobile 클래스, 항상 그것을 다음과 같이 언급하는 것은 어리석은 것 같습니다. automobile.Automobile 또한.

그러나 동시에, 많은 코드를 하나의 파일에 던져 하루라고 부르는 것은 옳지 않은 것 같습니다. 분명히 매우 복잡한 응용 프로그램에는 5 개 이상의 파일이 있어야합니다.

올바른 --- 또는 Pythonic --- 방법은 무엇입니까? (또는 올바른 방법이 없다면, 선호하는 방법과 이유는 무엇입니까?) Python 모듈에 얼마나 많은 코드를 던져야합니까?

도움이 되었습니까?

해결책

"논리적 포장 장치"라는 관점에서 생각하십시오. 이는 단일 클래스 일 수 있지만 더 종종 밀접하게 협력하는 클래스 세트가 될 것입니다. 클래스 (또는 모듈 레벨 기능-모듈 수준 함수가 선택으로 사용할 수있는 경우 항상 정적 메소드를 사용하여 항상 "파이썬에서 Java를 수행하지 마십시오!-)는이 기준을 기반으로 그룹화 할 수 있습니다. 기본적으로 A의 대부분의 사용자가 B가 필요하고 그 반대도 마찬가지라면 A와 B는 아마도 동일한 모듈에 있어야합니다. 그러나 많은 사용자가 그중 하나만 필요하지 않으면 다른 사용자가 필요하지 않다면 아마도 같은 모듈에 있어야합니다 (아마도 같은 패키지, 즉 디렉토리에 있어야합니다. __init__.py 파일).

표준 Python 라이브러리는 완벽하지는 않지만 완벽한 사례를 반영하는 경향이 있으므로 대부분 예를 들어 배울 수 있습니다. 예,, threading 모듈은 물론 a를 정의합니다 Thread 클래스 ... 그러나 자물쇠, 이벤트, 조건 및 세마포어와 같은 동기화-프리미셜 클래스와 스레드 작업 (및 몇 가지 더)으로 올릴 수있는 예외 클래스도 보유하고 있습니다. 합리적인 크기의 상한 (공백 및 docstrings를 포함한 800 줄)에 있으며 대기열과 같은 중요한 스레드 관련 기능이 별도의 모듈에 배치되었지만 여전히 여전히 의미가있는 최대 기능의 좋은 예입니다. 단일 모듈로 포장합니다.

다른 팁

당신이 당신의 1 등불 시스템을 고수하고 싶다면 (논리적으로, 나를 잘못 이해하지 마십시오), 당신은 다음과 같은 일을 할 수 있습니다. automobile.Automobile:

from automobile import Automobile
car = Automobile()

그러나 Cobbal이 언급했듯이 파일 당 하나 이상의 클래스가 Python에서 매우 일반적입니다. 어느 쪽이든, 당신이 현명한 시스템을 선택하고 일관되게 사용하는 한, 나는 어떤 파이썬 사용자가 당신에게 화를 내지 않을 것이라고 생각합니다 :).

C ++ 관점에서 오는 경우 .So 또는 .dll과 비슷한 파이썬 모듈을 볼 수 있습니다. 예, Python이 스크립트되어 있기 때문에 소스 파일처럼 보이지만 실제로는 특정 기능의로드 가능한 라이브러리입니다.

도움이 될 수있는 또 다른 은유는 파이썬 모듈을 네임 스페이스로 볼 수 있다는 것입니다.

중간 크기의 프로젝트에서 나는 여러 세트의 밀접하게 관련된 수업을 발견했습니다. 해당 세트 중 일부는 이제 파일로 그룹화됩니다. 예를 들어, 저수준 네트워크 클래스는 모두 단일입니다. network 기준 치수. 그러나 가장 큰 클래스 중 일부는 자체 파일로 나뉘어졌습니다.

아마도 1 급 파일 역사에서 그 길을 시작하는 가장 좋은 방법은 일반적으로 동일한 디렉토리에 배치하는 수업을 가져 와서 동일한 파일에 보관하는 것입니다. 해당 파일이 너무 커서 시작되면 분할하십시오.

모호한 가이드 라인 : 파일 당 1 클래스 이상이 파이썬의 표준입니다.

또한 참조하십시오 하나의 파일에 몇 개의 파이썬 클래스를 넣어야합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top