Сообщить об ошибке.

Атрибуты функций в Python.

У объектов функций есть специальный атрибут __dict__. Это словарь атрибутов функции. В него можно устанавливать и получать какие-то значения с помощью точечной нотации.

Доступ к словарю атрибутов функции можно получить как из тела функции, так и из вне:

def func():
    func.a = 10

>>> func.__dict__
# {}
>>> func()
>>> func.__dict__
# {'a': 10}
>>> func.a
# 10
>>> func.a = 25
>>> func.a
# 25
>>> func.x = 6
>>> func.x
# 6
>>> func.list = []
>>> func.list.append(10)
>>> func.list.append(1)
>>> func.list.append(5)
>>> func.list
# [10, 1, 5]
>>> func.__dict__
# {'a': 25, 'x': 6, 'list': [10, 1, 5]}

Удаление словаря атрибутов функции __dict__ или его настройка ни к чему не приведет. Если никакие атрибуты функции никогда не устанавливались, то словарь атрибутов функции __dict__ будет пустой.

Словарь атрибутов может быть использован для кеширования промежуточных значений декоратора или для кэширования уже вычисленных значений функции. Например это может быть атрибут функции func.cash, который будет хранить словарь, у которого в качестве ключа будет кортеж входных параметров функции, а значение словаря - возвращаемый результат функции.

Атрибуты функции могут использоваться для записи облегченных замыканий, которые объединяют код и связанные данные.

def func(i):
    func.a += i
    return func.a

>>> func.a = 1
>>> func(5)
# 6
>>> func(5)
# 11
>>> func(5)
# 16

Атрибуты иногда используются как статические переменные для функции.

def a():
    pass

a.publish = 1
a.unittest = '''...'''

if a.publish:
    print a()

if hasattr(a, 'unittest'):
    testframework.execute(a.unittest)