New submission from ppperry <maprea...@olum.org>: Take the following code:
import builtins class K(dict): def __getitem__(self, k): if k not in builtins.__dict__: print("get %s" % k) return dict.__getitem__(self, k) def __setitem__(self, k, v): print("set %s" % k) dict.__setitem__(self, k, v) exec(""" foo = "bar" foo try: qyz except NameError: pass class K: baz = foo def f(ggg=foo): pass def g(ggg=foo): global f f = 87 f g() """,K()) This should consitently either call or not call the overridden methods on the dictionary, producing either no output or: set foo get foo get qyz get foo get foo set K get foo set g get g set f get f Instead, only sometime the override gets called, producing set foo get foo get qyz set K get foo set g get g get f meaning that (a) modifications of global variables via global statements (b) code at class-level ignore overridden methods, whereas everything else follows them ---------- components: Interpreter Core messages: 310388 nosy: ppperry priority: normal severity: normal status: open title: Inconsistent behavior if globals is a dict subclass versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue32615> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com