3 ms·
You can hide fields in Python with a little bit of gymnastics: class EncapsulatedCounter: def __init__(self, initial_value): _count = initial
by nr378 11mo ago
You can hide fields in Python with a little bit of gymnastics:
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}")
- d0mine 11mo agoUsually, a simple function is enough: def make_counter(start=0): count = start def incr(): nonlocal count count += 1 return count return incr Example: >>> c = make_counter() >>> c() 1 >>> c() 2 But it hides nothing: >>> c.__closure__[0].cell_contents 2 >>> c.__closure__[0].cell_contents = -1 >>> c() 0 "private" in Python is cultural, not enforced. (you can access `self.__private` from outside too if you want).