#!/usr/bin/python3 """Holy fucking shit, we can override variable lookup in Python now.""" import collections class Meta(type): @classmethod def __prepare__(cls, name, bases, **kwds): return MagicNamespace() class MagicNamespace(dict): def __missing__(self, name): val = self[name] = Magic(name) return val Magic = collections.namedtuple('Magic', ['name']) class Foo(metaclass=Meta): x = [y] if __name__ == '__main__': print(Foo.__dict__)