2012-02-06 5 views
9

내가 다른 모듈에서 클래스 내에 단지 변수를 가져 오기 위해 노력하고있어 :가져 오기 다른 모듈에서 클래스 변수

import module.class.variable 
# ImportError: No module named class.variable 

from module.class import variable 
# ImportError: No module named class 

from module import class.variable 
# SyntaxError: invalid syntax (the . is highlighted) 

는 다음과 같은 처리를 할 수 있지만, 난 그냥 하나 개의 변수를 가져올 원합니다 나는 필요하다.

from module import class as tmp 
new_variable_name = tmp.variable 
del tmp 

이것이 가능합니까?

답변

10
variable = __import__('module').class.variable 
+0

전체 모듈을 가져올 것이라고 생각합니까?'import module'과 동일하면'variable = module.class.variable'입니까? –

+7

가져온 모듈에는 어떤 이름도 바인딩하지 않습니다. 괜찮아요,'from module import clazz'도 똑같은 방법으로 * 전체 모듈을 가져옵니다.이 문제를 해결할 방법은 없습니다. 클래스 정의는 모듈의 나머지 부분 없이는 의미가 없지만 컨텍스트, 클래스의 속성에 대해서도 마찬가지입니다. –

+0

@Alex 항상 * 전체 * 모듈을 가져옵니다 (그러나 스크립트의 범위에서 사용할 수있는 문장 *에 달려 있습니다). 'from x1 import x2'는'x1'을 적재하고,'x2'의 범위 나 서브 패키지로서'x2'를 찾을 곳을 찾습니다. –

5

당신은 할 수 없습니다 - import 문은 모듈 또는 서브 모듈의 요소 가져올 수 - 서브 모듈 액세스에 사용되는 것과 동일한 도트 구문과 주소가 될 수는 없지만, 클래스 속성을 개별적으로 가져 왔습니다.

당신이 할 수있는 것은 하나는 from module import anything 구문을 사용 않을 때마다

from mymodule import myclass 
myvar = myclass.myvar 
del myclass 

어느 쪽이든, 전체 모듈은 읽기 및 processed.The 예외가

from module.submodule import submodule 

, 경우입니다 서브 모듈 자체는 전체 모듈을 필요로하지 않으며, 서브 모듈 만 처리됩니다.

(위의 해결 방법조차도 mymodule이 읽히고 실행됩니다. 가져 오기 문이 작성된 전역 네임 스페이스에서는 액세스 할 수 없지만 모든 구성 요소와 함께 sys.modules 사전에 표시됩니다 .

+0

해결 방법은 해결 방법과 현저하게 비슷합니다! 설명 주셔서 감사합니다. –

관련 문제