Вопросы про глобальные переменные в Python

Тема в разделе "Perl, Python, Ruby", создана пользователем Jarhead, 13 мар 2020.

XEvil 4.0 Релиз Состоялся!
  1. Jarhead

    Jarhead

    Регистр.:
    17 июн 2011
    Сообщения:
    411
    Симпатии:
    156
    Код:


    Код:
    import time
    
    from functions import FunctionsList
    from stages import StageOne
    
    # Глобальные переменные
    mysql = False
    sql = False
    
    def checkdb():
        # Проверяем подключение к MySQL сайта
        try:
            mysql = pymysql.connect(
                host='**',
                user='***',
                password='***',
                db='***',
                charset='utf8mb4',
                cursorclass=DictCursor
            )
    
            # Проверяем подключение к SQL базе данных
            try:
                sql = pyodbc.connect('Driver={SQL Server Native Client 11.0};'
                                     'Server=HQSQL;'
                                     'Database=***;'
                                     'UID=***;'
                                     'PWD=**;')
    
            except Exception as e:
                FunctionsList().errorHandler(e, 'mysql')
    
                return False
    
        except Exception as e:
            FunctionsList().errorHandler(e, 'sql')
    
            return False
    
        finally:
            return True
    
    if checkDb():
        #
    else:
        #
    
    Есть пару вопросов.

    Как мне в классах FunctionsList и StageOne получить доступ к глобальным переменным mysql и sql? И второй вопрос туда же, если я в главном файле импортирую time, как мне в классах вызвать time? снова его нужно импортировать или как то глобальную переменную можно вызывать?

    Не получается почему то в классах через global вызвать эти переменные в функции.
     
  2. Maybe

    Maybe

    Moderator
    Регистр.:
    7 июл 2008
    Сообщения:
    1.173
    Симпатии:
    1.197
    Не увидел где вы используете ваш второй класс. Если вам нужные mysql sql в эррорхендлере - перепишите его так, чтобы он могу принимать эти аргументы, и передавайте их туда, как вариант.
    Касательно time также не понял как вы его используете, если вам нужны значения которые привязаны четко ко времени, вам надо передать эти значения в вашу функцию/класс, если не так все четко - можете в другом файле так же time импортировать и использовать.
     
  3. chameleoz

    chameleoz Создатель

    Регистр.:
    16 июл 2019
    Сообщения:
    11
    Симпатии:
    0
    для доступа к глобальным переменным вам нужно объявить их в теле функции повторно с приставкой global. но при объявления функции и переменной должны находится в одном текстовом блоке.
    https://docs.python.org/3/reference/simple_stmts.html#global

    По поводу использования import time вы должны импортировать его в каждом файле в котором вы к нему обращаетесь, тем не менее интерпретатор Python не будет его в реальности повторно импортировать если он ранее кешировал необходимые вызовы. так же хорошей практикой является импорт не всего файла а только необходимые вызовы
    from time import
    https://docs.python.org/3/reference/import.html
    https://docs.python.org/3/tutorial/modules.html