Как в функции обратиться к переменной на уровень выше? Python

Дана структура:

def a():
    aaa = 0
    .....
    for i in range(3):
        def b(c):
            if c == 1:
                aaa += 1
        b(1)
        ...
        def g(c):
            if c == 1:
                aaa += 1
        g(1)
        ...
    print(aaa)
a()
>>> 0 
а нужно чтобы выводилось 2

Как можно сделать, чтобы функция b() перезаписывала переменную aaa в пространстве имен функции a(). global не сработало.


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

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

области видимости

def a():
    aaa=0
    def b():
        nonlocal aaa
        aaa+=1
    b()
    print(aaa)
a()
→ Ссылка
Автор решения: Xander

Не надо использовать global и nonlocal без очень крайней нужды.

Используйте настоящиее классы:

class A:
    
    def __init__(self):
        self.aaa = 0
    
    def b(self):
        self.aaa += 1
    
    def print_result(self):
        print(self.aaa)


a = A()
a.b()
a.print_result()  # Напечатает 1
→ Ссылка