pycharm не может ссылаться на глобальную переменную внутри функции - PullRequest
0 голосов
/ 09 марта 2019

Я определяю глобальную переменную в функции. Но PyCharm не может ссылаться на эту глобальную переменную.код вроде этого:

a.py:
g_Handle = None
def Init():
    import mods
    global g_handle
    g_handle = mods.handle_class()

b.py:
import a
a.g_handle 
# PyCharm will reference 'g_handle' as None,
# but I want reference 'g_handle' as mods.handle_class

Я пытаюсь добавить тип для g_handle, но я не хочу импортировать моды напрямую в a.py

a.py:
g_handle =None # type: mods.handle_class

, но это не работает .canне могу найти моды, поэтому я хочу знать, как позволить PyCharm ссылаться на g_handle как mods.handle_class.Спасибо.

1 Ответ

0 голосов
/ 09 марта 2019

Я не уверен, является ли это элементом того, как вы задаете свой вопрос, но похоже, что у вас здесь несколько проблем.Первая - это проблема со ссылкой на импорт (или, возможно, с использованием импорта, где класс будет более эффективным).

Смотрите, если вы запустите код только так, как вы описали и предоставили, вы никогда не получите правильный ответчто вы ищете, потому что функция Init в a.py никогда не будет вызвана.

Вы должны иметь определенную глобальную переменную, определенную каким-либо образом в глобальной области видимости, прежде чем использовать ее, как в своем коде.

Глобальный оператор просто говорит интерпретатору связать значенияпредоставленная переменная во всех штатах.Он не определяет переменную в самой внешней области видимости самостоятельно.

Следовательно, что-то вроде этого ( РЕДАКТИРОВАТЬ: ИСПРАВЛЕНО ):

a.py:
g_handle = False
def Init():
    import mods
    global g_handle
    g_handle = mods.handle_class()

b.py:
import a

a.Init()
a.g_handle

... должно работать, чтобы вернуть то, что вы ищете.

Если бы вы могли использовать класс вместо импорта из другого модуля, вы могли бы также избавить себя от неприятностей:

import mods

class a():
    g_handle = False
    global g_handle

    def __init__(self, handle_class):
        g_handle = handle_class()

if __name__ == "__main__":
    a(mods.handle_class).g_handle
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...