Использование родительских переменных из импортированного модуля - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть некоторый скрипт, т.е. main.py Он использует модуль module.py с некоторыми переменными:

функции func1, func2...

целые числа int1, int2...

ии так далее

Итак, мне нужно расширить функциональность module.py с помощью нового замечательного подмодуля с именем submodule.py, который должен использовать переменные module.py для предоставления мне новых функций.

Вот некоторый код submodule.py:

class New_Feature:
    def __init__(self, param1):
        result = func1(param1, default_param)
        self.attr1 = func2(result.attr2)
    def inner_func(self)
        return self.attr1 + int1

Поэтому я использую from submodule import * (я знаю, что нет переопределенных имен) в коде module.py, а затем использую module.New_Feature в main.py

Этот код выдает NameError: name 'func1' is not defined

Так, как я могу импортировать субмодуль для использования в нем переменных модуля?

РЕДАКТИРОВАТЬ: Просто объясняя, зачем мне это нужно.Я пишу обертку API с кучей функций, но эти функции должны быть необязательными, чтобы не перегрузить основной файл, чтобы пользователи могли просто использовать то, что им нужно.

1 Ответ

0 голосов
/ 02 февраля 2019

Итак, мне нужно расширить функциональность module.py с помощью нового замечательного подмодуля submodule.py, который должен использовать переменные module.py для предоставления мне новых функций.

То, чего вы пытаетесь достичь, это execfile из Python 2.x

Обратите внимание, что вы можете передать locals и globals в execfile -call.

Для Python 3.x вы можете использовать ideasman42 рецепт от Что является альтернативой execfile в Python 3?

def execfile(filepath, globals=None, locals=None):
    if globals is None:
        globals = {}
    globals.update({
        "__file__": filepath,
        "__name__": "__main__",
    })
    with open(filepath, 'rb') as file:
        exec(compile(file.read(), filepath, 'exec'), globals, locals)
...