2011-10-16 7 views
2

짧은 버전 :파이썬에서 문자열을 사용하여 가져 오기

문자열 strstr에 이름이 저장되어있는 메서드를 가져 오려는 파일 functions.py가 있다고 가정 해보십시오.

어떻게해야합니까? 나는 다음과 같은 것을 원한다 :

from functions.py import str 

그러나 str을 평가하고 'str'(존재하지 않는) 메소드를 가져 오지 않도록한다.

일부 인터넷 검색 후 나는 (희망)으로 가까이 왔어 :

func_name = str 
_tmp = __import__('functions.py', globals(), locals(), ['func_name'], -1) 
func = ???? <what to put here?> 

미리 감사드립니다.

편집 : TMI.

+0

참고는'functions'가 아닌'functions.py'을 가져와야합니다. – Robin

답변

4

후 마지막 단계는 간단하다 : 당신의 목표는 당신이 필요로하는 기능을 가져 메모리를 저장하는 것입니다

func = getattr(_tmp, func_name) 
+0

우수합니다. 위대한 작품입니다. 감사! –

1

getattr 메서드는 주어진 개체의 특성을 제공합니다. 전역 함수 그들이에있는 모듈의 속성이기 때문에, 당신은이를 사용할 수 있습니다 : 당신이 사전에 모듈 이름을 모르는 경우에만이 일반적으로 필요한으로 __import__를 사용할 필요가 없다

import functions 

funcName = 'doSomething' 
f = getattr(functions, funcName) 
f(123) 

. _tmp 작품에 모듈을 가져올 코드를 가정

0

경우, 귀찮게하지 않습니다; from ... import ... 구문을 사용했다하더라도 파이썬은 전체 모듈을 여전히 가져옵니다. 단지 명시 적으로 요청한 멤버를 현재 사전에 추가하기 만합니다. 나머지는 여전히 메모리에 있으며 단지 직접 액세스 할 수 없다는 것입니다. 그걸 염두에두고

, 나는이 라인을 따라 뭔가를 할 것이다 :

import functions 
the_name = self.name.lower() + str(i) 
the_func = getattr(functions, the_name) 
+1

TypeError : 'module'객체는 subscriptable이 아닙니다. –

+0

@Mark Ah, 맞아. 얼마 동안 언어를 사용하지 않으면 작은 비트를 잊어 버립니다. :) –

관련 문제