Pythonic способ найти имя глобального импорта пространства имен - PullRequest
0 голосов
/ 26 апреля 2011

Я пытаюсь построить некоторый динамический код, который анализирует текстовый файл с объектами, названными по имени импорта в верхней части модуля ... сейчас я перебираю все элементы в sys._getframe(0), чтобы найти f_globals.Есть ли более питонный способ найти f_globals?

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 ]

2 голосов
/ 26 апреля 2011

Вы хотели globals()?

1 голос
/ 26 апреля 2011

Вы не можете просто использовать

globals()

Кроме того, есть ли причина, по которой не следует явно указывать объект для итерации? Таким образом, вы не склонны к «глобальному» «загрязнению» из-за некоторого соотнесенного импорта.

...