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

TGINSIGHT POST

Post #52

@pythonotes

Python Заметки

Views561Post view count
PostedMar 1603/16/2020, 09:00 AM
Post content

Post content

Знаете ли вы про "магические" методы классов ˍˍgetattributeˍˍ() и ˍˍgetattrˍˍ()? ˍˍgetattributeˍˍ вызывается всякий раз когда идёт обращение к атрибуту объекта. Например метод или какая-то переменная. ˍˍgetattrˍˍ вызывается когда атрибут не найден. И вот тут-то начинается самое интересное. Вы можете написать алгоритм определения динамического атрибута. Вы получаете его имя и можете решить, что вернуть учитывая запрошенное имя. Например, можете сделать запрос в базу данных или просто вернуть значение по умолчанию. Но пост на самом деле не об этом. Дело в том, что в Python 3.7 добавили возможность определять функцию ˍˍgetattrˍˍ() в модуле с аналогичной функциональностью! (PEP562) То есть, создав внутри модуля функцию ˍˍgetattrˍˍ() мы определяем действие в случае запроса несуществующего атрибута модуля. Ровно так же как это делаем в классах. Тем самым можно динамически определять состав модуля. А еще можно создать функцию ˍˍdirˍˍ(), определяющую поведение для стандартной функции dir(). Пример модуля: # example.py my_variables = {'var1': 1, "var2": 2} def __getattr__(name): try: return my_variables[name] except KeyError: raise AttributeError def __dir__(): return list(my_variables.keys()) Как использовать модуль >>> import example >>> print(example.var1) 1 >>> print(example.var3) AttributeError >>> print(dir(example))) ['var1', 'var2'] #tricks#pep