Парсить json файл и после инициализации чтоб был доступен?

Привет, я пару дней питон изучаю. Вопрос такой:
У меня есть файл конфигурации json. Есть базовый класс который тоже собирает информацию из конфигов. Как мне после инициализации, хранить информацию где-то не парся ещё раз этот файл. Хотелось бы импортнуть этот класс и просто обратиться как к массиву. Как это сделать?
  • Вопрос задан
  • 204 просмотра
Решения вопроса 1
Astrohas
@Astrohas
Python/Django Developer
Паттерн называется синглтон.

class EnvironmentSetup(unittest.TestCase):
    base_config = None

    @classmethod
    def setUpClass(cls):
        cls.base_config = cls.setConfig()

    @classmethod
    def setConfig(cls):
        with open('../config.json') as file:
            config = json.load(file)
        return config

    def __new__(cls):
        # Перекрываем создание объекта класса
        if not hasattr(cls, 'instance'):
            cls.instance = super().__new__(cls)
        return cls.instance

ту и при init делать все вещи
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
NeiroNx
@NeiroNx
Программист
Вы наверно его регулярками парсите, в то время как все нормальные люди используют библиотеку json.
{"myint":1,"mystring":"string","myarray":["item1","item2","item3"]}

функция config=json.load(open("config.json")) как раз парсит его в переменную типа dict или list (от содержимого зависит) и потом обращаетесь как к словарю массиву.
>>>config["myint"]
1
>>>config["mystring"]
'string'
>>>config["myarray"][0]
'item1'

можно парсить в переменную которая видима во всех функциях и потом к ней обращаться.

P.S. Я локальные мини базы данных храню в json - хочешь загрузил, обработал, сохранил. Очень удобно.
Ответ написан
@dmitrykorj Автор вопроса
Класс 1 (инициализирующий)
class EnvironmentSetup(unittest.TestCase):
    base_config = None

    @classmethod
    def setUpClass(cls):
        cls.base_config = cls.setConfig()

    @classmethod
    def setConfig(cls):
        with open('../config.json') as file:
            config = json.load(file)
        return config


Класс 2
from tests.base.test import EnvironmentSetup as base_test
class Another:
    def __init__(self, params):
        print(base_test.base_config)  -> Получаю None соответственно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы