import a.b.c
a.b.c.foo()
이것은 또한 작동합니다 :
from a.b import c
c.foo()
하지만 작동하지 않습니다 :
from a import b.c
b.c.foo()
도 않습니다 :
from a import b
b.c.foo()
b.c.foo()
이 작동하도록 가져 오기를 수행하려면 어떻게해야합니까?
import a.b.c
a.b.c.foo()
이것은 또한 작동합니다 :
from a.b import c
c.foo()
하지만 작동하지 않습니다 :
from a import b.c
b.c.foo()
도 않습니다 :
from a import b
b.c.foo()
b.c.foo()
이 작동하도록 가져 오기를 수행하려면 어떻게해야합니까?
그냥 이름을 변경 :
from a.b import c as BAR
BAR.foo()
최근 코멘트보기 하지만 실제로 솔루션이 작동합니다. –
'b
'패키지에는 항상 b
의 일부로 액세스 할 수 있도록 'import c
'을 추가해야합니다.
그러면 b는 여러분이 사용하고자하는 모든 서브 모듈을 추측해야합니까? 코드가 C에 있습니다. 더 좋은 방법이 있으면 안됩니까? –
from a import b
from a.b import c
b.c = c
코드를 monkeypatching 아닌가요? –
"코드를 monkeypatching"한다는 것이 의미하는 것은 확실하지 않습니다 - 그것은 자신의 c 하위 모듈을 가져 오지 않는다는 사실을 교정하기 위해 monkeypatching module (패키지) b입니다. –
BTW에서 중간 이름을'as'로 변경할 수도 있습니다. 물론'b.c'로 다시 monkeypatch하든 그렇지 않든간에. –
import a.b.c
from a import b
b.c.foo()
중요하지 않습니다 가져 오기 문장의 순서.
특별한 이유가 당신이 당신의 코드에 대한 b.c.foo() 구문 대신 c.foo()를해야하는 이유? – Amber
예, 접두사는 많은 중첩 모듈에서 실제로 길지만 가져 오기 'c'는 네임 스페이스 충돌입니다. –
좋습니다. 추가하여 문제를 치유 할 수 없도록 c.foo()를 작성하는 것이 의미 론적으로 정확하다고 가정합니다. –