2011-07-02 1 views
-2

a.py :로컬 네임 스페이스의 일부를 가져 오는 사람에게 제공 할 수있는 방법이 있습니까?

import b 
import c 
... 
import z 

class Foo(object): 
    ... 

양태에서는 모듈 B-Z의 각 클래스 foo는 사용해야합니다.

importing과 같이 A의 네임 스페이스 (예 : foo)에 대한 각 모듈 B-Z 액세스를 계속 허용하면서 모든 모듈 A-Z의 모든 값에 대한 간접 액세스 (예 : 객체를 통한)를 허용하는 몇 가지 방법입니다.

+0

나는 당신이 무엇을 요구하고 있는지 이해할 수 없다. 설명 할 코드를 게시 할 수 있습니까? –

+0

가능한 한 명확하게 게시물을 편집 한 후에도 여전히 이해할 수 없습니다. 질문을 편집하고 실제로 무엇을하려고하는지 말하십시오. – ninjagecko

답변

2

아니요. 차례로 각각 A을 가져와야합니다.

+0

주기적 의존성 == 실패 – JBernardo

+1

@JBernardo : 파이썬이 아닙니다. 제대로 완료되면 해결할 수 있습니다. –

+1

"__if가 제대로 완료되었습니다 __"... http://en.wikipedia.org/wiki/Anti-pattern – JBernardo

2

나는 아직도 당신이 요청하는 경우에도 일을하려고하거나 무엇을 말할 수 있지만, 이것은 나의 추측이다 :

일반적으로, 단지 고전적인 수입을 사용합니다.

IF 모듈이 너무 커지거나, 나눌 이유가 충분하지만 같은 네임 스페이스를 공유하려는 경우 더미 네임 스페이스에 값을 "올릴 수 있습니다." 예를 들어 widget.Foowidget.Bar을 서로 다른 파일에 넣고 싶었지만 각 파일에 FooBar을 입력 할 수있게하려면 보통 from widget import Foofrom widget import Bar을 사용해야합니다. 이 파일들 (foo.py, bar.py, baz.py, ..., zeta.py)이 많다면 약간 다루기 힘들 수 있습니다. 따라서 widget/__init__.py에 한 번만 가져 와서 각 폴더에서 번으로 이동하고 각 모듈에서 from widget import * 한 번만 이동하여 상황을 개선 할 수 있습니다. 그리고 당신은 끝났어! ... 잘 ... 거의 ...

이것은 당신이 극도로 조심해야하는 순환 수입 시나리오에 당신을 데려 간다 : Circular (or cyclic) imports in PythonBar를 참조하면 예를 들어 괜찮을 것이다. foo.py의 함수에서는 값을 즉시 사용하지 않기 때문에 모든 것이 잘됩니다. 그러나 x = Barfoo.py에 입력하면 값이 아직 정의되지 않았을 수 있습니다!

sidenote : __import__ 기능을 사용하여 프로그래밍 방식으로 가져올 수 있습니다. 이것을 os.walk과 연결하면 위젯 폴더의 각 파일에 from ... import *을 입력하지 않아도됩니다. 이것은 버그를 줄이기 위해 필수적이고 필요한 단계입니다.

관련 문제