2010-06-11 7 views
10

저는 Python을 배우고 있으며 패키지를 가지고 놀았습니다. 패키지에 클래스를 정의하는 가장 좋은 방법을 알고 싶었습니다. 패키지에 클래스를 정의하는 유일한 방법은 해당 패키지의 __init__.py에 클래스를 정의하는 것입니다. Java에서 왔기 때문에 클래스에 대한 개별 파일을 정의하고 싶습니다. 권장되는 방법입니까?패키지의 클래스 정의

내 디렉토리가하고 싶은

은 다음과 같이 다소 찾습니다

recursor/ 
    __init__.py 
    RecursionException.py 
    RecursionResult.py 
    Recursor.py 

그래서 내가 recursor.Recursor, recursor.RecursionExceptionrecursor.RecursionResult로 내 수업을 참조 할 수있다. 이것이 파이썬에서 가능하거나 권장 할만한가?

+4

필수 : ​​[Python은 Java가 아닙니다] (http://dirtsimple.org/2004/12/python-is-not-java.html) – voyager

+0

http://stackoverflow.com/questions/2339371/ as-a-java-programmer-learning-python-what-should-i-look-out-for – froadie

+2

네, 할 수 있지만 할 수는 없습니다. –

답변

8

클래스를 별도의 모듈로 정의하십시오. 그런 다음 __init__.py 이런 식으로 뭔가를 할 수 있도록 : 패키지의 루트 네임 스페이스에 각 클래스를 가져옵니다

from RecursionException import RecursionException 
from RecursionResult import RecursionResult 
from Recursor import Recursor 

, 그래서 호출 코드가 recursor.Recursor 대신 recursor.Recursor.Recursor를 참조 할 수 있습니다.

내가 여기에 다른 의견을 남기고 싶은 생각이 든다. 파이썬은 자바가 아니다. 태양 아래 모든 클래스에 대해 새 모듈을 만드는 대신 밀접하게 관련된 클래스를 단일 모듈로 그룹화하는 것이 좋습니다. 그런 식으로 코드를 이해하는 것이 더 쉽습니다. 호출 코드에는 bazillion 가져 오기가 필요하지 않습니다.

+4

'recursor.Recursor.Recursor'에는 특정 매력이 있습니다. – Ricky

2

이것은 완벽하게 수행 할 수 있습니다. 각 클래스에 대해 새 클래스 모듈을 만들고 게시 한 구조를 정확하게 작성하면됩니다.

또한 Recursion.py 모듈 또는 이와 유사한 것을 만들 수 있으며 해당 파일에 3 개의 클래스를 모두 포함 할 수 있습니다.

는 (나는 자바에서 파이썬에 새로운 해요, 난 아직 ... 내 __init__.py 파일에 아무것도 넣지 않은) 당신이 파일을 몇 당 1 개 클래스를 정의 할 수있는 것은 아닙니다 파이썬에서

+0

위의 디렉토리 레이아웃을 만들고 Recursor.py 파일에서 내 Recursor 클래스를 정의하고 "recursor.Recursor"를 가져 오려고하면 ImportError가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? –

+0

@rfkrocktk - recursor.Recursor.Recursor ... 패키지의 첫 번째 항목, 모듈의 두 번째 항목 (파일) 및 실제 클래스의 세 번째 항목을 지정해야 할 수도 있습니다. (때로는 사용을 고려하는 것이 좋습니다 모듈을 패키지로 정렬 ...이 3 개의 클래스가 별도의 파일 인 패키지 리 커서 대신,이 3 개의 클래스가 포함 된 모듈 리 커서를 가질 수 있습니다. – froadie

1

을 그렇게. 당신이 원한다면 할 수 있습니다 - 그것은 전적으로 당신에게 달린 것입니다. Python의 패키지는

__init__.py 

파일이있는 디렉토리 일뿐입니다. 이 파일에 아무것도 가져올 필요가 없습니다. 가져올 내용을 제어 할 수 있습니다.