Переменные состояния в Python: когда выбирать классы, нелокальные переменные или атрибуты функций
Существует (как минимум) три различных способа отслеживания информации о состоянии для функций в python (примеры, представленные без какого-либо значимого способа использования информации о состоянии, очевидно):
ООП Классы:
class foo:
def __init__(self, start):
self.state = start
# whatever needs to be done with the state information
нелокальные переменные (Python 3):
def foo(start):
state = start
def bar():
nonlocal state
# whatever needs to be done with the state information
return bar
или атрибуты функции:
def foo(start):
def bar(bar.state):
# whatever needs to be done with the state information
bar.state = start
return bar
Я понимаю, как работает каждый метод, но я не смог рассуждать о том, почему (кроме знакомства) вы бы выбрали один метод вместо другого. После Zen of Python классы кажутся наиболее элегантной техникой, поскольку она устраняет необходимость вложения определений функций. Однако, в то же время, классы могут вносить больше сложности, чем необходимо.
Что нужно учитывать при взвешивании, какой метод использовать в программе?