class EncapsulatedCounter: def __init__(self, initial_value): _count = initial_value def increment(): nonlocal _count _count += 1 return _count self.increment = increment counter = EncapsulatedCounter(100) new_value = counter.increment() print(f"New value is: {new_value}")
def make_counter(start=0): count = start def incr(): nonlocal count count += 1 return count return incr
>>> c = make_counter() >>> c() 1 >>> c() 2
>>> c.__closure__[0].cell_contents 2 >>> c.__closure__[0].cell_contents = -1 >>> c() 0