Python. Подменить вызов вложенной функции

Как в данном примере получить от foo_2 значение 5 например, не меняя глобальную переменную a? (я рассчитываю на замыкания или нечто подобное)

a = 1


def foo_1():
return a


def foo_2():
retun foo_1()

Ответы (1 шт):

Автор решения: CrazyElf

Не очень понимаю, как вы хотите, но в Питоне можно просто присвоить имени функции ссылку на другую функцию.

a = 1

def foo_1():
  return a 

def foo_2():
  return foo_1()

print('foo_2 выдает', foo_2())

def foo_2_new():
  return 5

old_foo_2 = foo_2
foo_2 = foo_2_new

print('новая foo_2 выдает', foo_2())

foo_2 = old_foo_2

print('старая foo_2 выдает', foo_2())

Вывод:

foo_2 выдает 1
новая foo_2 выдает 5
старая foo_2 выдает 1

В данном случае можно и не foo_2, а foo_1 точно так же подменить с тем же результатом.

→ Ссылка