TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #168 1.17K
Давайте немного прокачаем стандартный словарь. Зачем? А потому что Python это позволяет)))
Добавим возможность работать с ключами словаря как с атрибутами объекта. Для этого нам потребуется определить три метода:

__getattr__ - получение атрибута
__setattr__ - изменение атрибута
__delattr__ - удаление атрибута

Наследоваться будем от стандартного словаря

class _AttribDict(dict):
def __getattr__(self, name):
return self[name]

def __setattr__(self, name, value):
self[name] = value

def __delattr__(self, name):
del self[name]

Подменяем стандартный словарь в одну строку

__import__('builtins').__dict__['dict'] = _AttribDict

Всё, можно тестить 😬

>>> obj = dict(name='Object1', id=14)
>>> print(obj)
{'name': 'Object1', 'id': 14}

Выглядит как обычный словарь

>>> obj['name'] = 'Thing 1'
>>> print(obj['name'])
Thing 1

Изменение ключей работает. То есть стандартное поведение не сломали. А теперь попробуем обратиться к атрибутам

>>> print(obj.name)
Thing 1

Пробуем изменить ключ через атрибут

>>> obj.name = 'Thing 2'
>>> print(obj.name)
Thing 2

И удаляем ключ через атрибут

del obj.name
print(obj)
{'id': 14}

Теперь с ключами словаря можно работать и обычным способом:

dict['key']

и как с атрибутами:

dict.key

Выглядит интересно.
Но помните , если Python позволяет это делать, это не значит что это можно делать 👮‍♂️!
Подобные эксперименты лучше оставить для развлечения и не допускать в прод.
Хорошая разминка, не более того.

#tricks
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →