2012-09-27 5 views
3

내 패키지 계층 : 악기 파일의코드 스타일 - 패키지의 이름 공간 "병합"

InstrumentController/ 
    __init__.py 
    instruments/ 
     __init__.py 
     _BaseInstrument.py 
     Keithley2000.py 
     # etc... 

내용 :

내 사용자가 필요없이 클래스에 액세스 할 수있게하려면
# _BaseInstrument.py 
class _BaseInstrument(object): 
    """Base class for instruments""" 
    # etc... 

# Keithley2000.py 
from InstrumentController.instruments._BaseInstrument import _BaseInstrument 
class Keithley2000(_BaseInstrument): 
    # etc... 

모듈 계층 구조를 탐구합니다. 그들은 단지 from InstrumentController.instruments import Keithley2000이어야하며 from InstrumentController.instruments.Keithley2000 import Keithley2000이 아야합니다. 내가 InstrumentController.instruments.__init__이 같은 라인의 무리가이 목적을 위해

:

from .Keithley2000 import Keithley2000 
from .StanfordSR830 import StanfordSR830 
# etc... 

는 이제 클래스 오히려 서브 모듈에 비해, 패키지의 네임 스페이스의 상단에 앉아있다. 내 질문은 : 이것은 좋은 생각입니까? 클래스는 모듈이 속한 모듈과 동일한 이름을 갖기 때문에 최상위 레벨에서 클래스를 가져 오면 모듈을 사용할 수 없게됩니다. 이것은 나를 약간 짜증나게합니다 - 이것을하는 더 좋은 방법이 있습니까?

+0

클래스를 단일 모듈에 넣는 것은 옵션이 아닙니다. 사람들은 앞으로 패키지에 들어갈 새 파일을 작성할 것이며 기존 파일을 수정하지 못하게 할 것입니다. –

답변

4

어떻게 하시겠습니까?하지만 모든 패키지/모듈 이름을 소문자로 바꾸는 것이 좋습니다. 1)이 규칙은 specified in PEP 8이며, 2) 섀도 잉 문제가 제거됩니다.

+0

PEP8에 따르면 함수의 이름은 모두 소문자이어야합니다. 같은 이름의 서브 모듈에서 함수를 '가져 오기'할 필요가있는 경우를 해결하기 위해 어떤 명명 규칙이 권장됩니까? –

+0

정상적인 해결책은 모듈과 같은 이름의 함수를 가지지 않는 것입니다 (두 모듈과 함수의 이름은 소유권이 아니라 목적을 반영해야하기 때문에 끔찍한 것은 아닙니다). –