from types import ModuleType
def custom_mapping_module(name, mapping):
class _CustomMappingModule(ModuleType):
def __getattr__(self, name):
return mapping[name]
def __setattr__(self, name, value):
mapping[name] = value
def __delattr__(self, name):
del mapping[name]
return _CustomMappingModule(name)
from collections import ChainMap
c = ChainMap({'a': 1}, {'b': 2})
m = custom_mapping_module('foo', c)
print(m.a)
print(m.b)
del m.a
m.b = 3
print(m.b)
print(c)
print(m.__name__)
print(isinstance(m, ModuleType))
ZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQoKZGVmIGN1c3RvbV9tYXBwaW5nX21vZHVsZShuYW1lLCBtYXBwaW5nKToKICAgIGNsYXNzIF9DdXN0b21NYXBwaW5nTW9kdWxlKE1vZHVsZVR5cGUpOgogICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmdbbmFtZV0KICAgICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgogICAgICAgICAgICBtYXBwaW5nW25hbWVdID0gdmFsdWUKICAgICAgICBkZWYgX19kZWxhdHRyX18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgIGRlbCBtYXBwaW5nW25hbWVdCiAgICByZXR1cm4gX0N1c3RvbU1hcHBpbmdNb2R1bGUobmFtZSkKCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENoYWluTWFwCgpjID0gQ2hhaW5NYXAoeydhJzogMX0sIHsnYic6IDJ9KQptID0gY3VzdG9tX21hcHBpbmdfbW9kdWxlKCdmb28nLCBjKQpwcmludChtLmEpCnByaW50KG0uYikKZGVsIG0uYQptLmIgPSAzCnByaW50KG0uYikKcHJpbnQoYykKcHJpbnQobS5fX25hbWVfXykKcHJpbnQoaXNpbnN0YW5jZShtLCBNb2R1bGVUeXBlKSk=