TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки
Python Заметки avatar

TGINSIGHT POST

Post #233

@pythonotes

Python Заметки

Прегледи1,890Број на прегледи
Објавено7 апр.07.04.2021 г., 09:02
Содржина

Содржина на објавата

import sys print(sys.implementation) Выполнив этот код, вы увидите некий объект namespace с данными о текущей имплементации интерпретатора. Помимо того что эта информация может быть как-либо полезна давайте обратим внимание на то, что это за объект вообще? Узнаем что это за тип >>> type(sys.implementation) <class 'types.SimpleNamespace'> SimpleNamespace это простой тип для реализации неймспейса. Если не знаете что такое неймспейс, то представьте себе некий объект-контейнер, куда можно складывать другие объекты. После чего обращаться к ним через имя контейнера. То есть, к имени объекта добавляется дополнительный уровень имени, что и является пространством имён. По сути, любой модуль и класс является неймспейсом для своего содержимого (если не импортить это содержимое из модуля через "*"). Класс SimpleNamespace позволяет легко добавлять и удалять атрибуты. А также можно передать в конструктор keyword аргументы чтобы сразу создать нужные атрибуты >>> from types import SimpleNamespace >>> conf = SimpleNamespace(key1=1, key2=2) >>> conf.key1 1 >>> setattr(conf, 'key3', 3) или >>> conf.key3 = 3 >>> conf.key3 3 >>> delattr(conf, 'key2') или >>> del conf.key2 >>> conf namespace(key1=1, key3=3) Вот так можно преобразовать словарь в неймспейс: >>> keys_dict = {'k1': 1, 'k2': 2} >>> keys = SimpleNamespace(**keys_dict) >>> keys namespace(k1=1, k2=2) Обратное преобразование через vars >>> vars(conf) {'key1': 1, 'key3': 3} Как это можно использовать? ▫️ красиво оформить "константы" или конфиг. В этом случае, кстати, я бы делал ключи аперкейсом. >>> conf = SimpleNamespace( **json.load(config_file.open()) ) >>> conf.API_HOST "192.168.10.20" ▫️ быстро преобразовать словарь в подобие объекта с доступом к ключам через атрибуты. То есть вместо такой записи: shape['width'] можно будет писать так: shape.width ▫️альтернатива для namedtuple, в которой доступно изменение значения атрибутов. #tricks