On Sat, 24 Sept 2022 at 07:52, Meredith Montgomery <mmontgom...@levado.to> wrote: > > def Counter(name = None): > o = {"name": name if name else "untitled", "n": 0} > def inc(o): > o["n"] += 1 > return o > o["inc"] = inc > def get(o): > return o["n"] > o["get"] = get > return o >
Want a neat demo of how classes and closures are practically the same thing? def Counter(name=None): if not name: name = "untitled" n = 0 def inc(): nonlocal n; n += 1 def get(): return n return locals() Aside from using a nonlocal declaration rather than "self.n", this is extremely similar to classes, yet there are no classes involved. A class statement creates a namespace. The locals() function returns the function's namespace. Each call to Counter() creates a new closure context, just like each call to a constructor creates a new object. There's very little difference, at a fundamental level :) ChrisA -- https://mail.python.org/mailman/listinfo/python-list