2011-04-25 53 views
0

我想建立一些動態的代碼,分析一個文本文件,從模塊頂部的導入命名的對象...現在我遍歷sys._getframe(0)中的所有項目找到f_globals。是否有更多pythonic方式找到f_globalsPythonic的方式來找到全球命名空間導入名稱

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

是的,就是這麼簡單。謝謝。 – 2011-04-25 20:23:11

1

你就不能使用

globals() 

此外,有沒有一個原因,爲什麼不明確指定要迭代的對象?這樣,你就不容易因某些相關進口產品造成「全球性」「污染」。

+0

我正在將所有我關心的類重命名爲'_SomeObject' ...然後用戶的配置文件必須在使用前指定確切的對象名稱;所以我認爲使用這種技術是合理的。你有另外一個建議嗎? – 2011-04-25 20:29:41

+0

@Mike:這當然只是一個味道問題,但我可能仍然會使用全局對象字典。國際海事組織明確命名用戶可以使用哪些對象有助於提高可讀性(以及它避免全局內省,但這是次要的),而不僅僅是魔術「_」前綴(按照慣例用於「內部」,現在它被用作「 API標記「)。因人而異。 – Almad 2011-04-25 20:41:14

相關問題