2011-04-25 3 views
0

모듈 위쪽에있는 가져 오기에서 이름이 지정된 개체로 텍스트 파일을 구문 분석하는 일부 동적 코드를 작성하려고합니다 ... 지금은 모든 항목을 반복합니다. sys._getframe(0)f_globals을 찾으십시오. f_globals을 찾는 더 평범한 방법이 있습니까?글로벌 네임 스페이스 가져 오기의 이름을 찾는 Python 방법

import re 
import sys 
import inspect 
## Import all Object models below 
from Models.Network.Address import MacAddress as _MacAddress 
from Models.Network.Address import Ipv4Address as _Ipv4Address 

class Objects(object): 
    "Define a structure for device configuration objects" 

    def __init__(self): 
     "Initialize the Objects class, load appropriate objects" 
     self.objects = dict() 
     for name, members in inspect.getmembers(sys._getframe(0)): 
      if name == 'f_globals': 
       for modname, ref in members.items(): 
        if re.search('^_[A-Za-z]', modname): 
         self.objects[modname] = ref 
     return 

답변

2

globals()을 원하셨습니까?

+0

예 간단합니다. 고맙습니다. –

1

당신은

globals() 

를 사용할 수 있습니까?

또한 반복적으로 개체를 명시 적으로 지정하지 않는 이유가 있습니까? 그런 식으로, 당신은 상관 된 수입에 의한 "세계화" "오염"에 취약하지 않습니다.

+0

나는'_SomeObject'로 신경 쓰는 모든 클래스의 이름을 바꿉니다 ... 사용자의 설정 파일은 사용하기 전에 정확한 객체 이름을 지정해야합니다; 그래서이 기술을 사용하는 것이 합리적이라고 생각합니다. 또 다른 추천이 있니? –

+0

@Mike : 이것은 맛의 문제 일뿐입니다.하지만 전 세계적인 사전 개체를 사용하고있을 것입니다. IMO는 사용자가 사용할 수있는 객체를 명시 적으로 명명하는 IMO는 마술 "_"접두어 (관습에 따라 "내부"에 사용되는 "_"접두어보다 가독성 (전역 인트로피 션을 피할뿐만 아니라 사소한 점임)를 돕습니다. API 마커 "). YMMV. – Almad