rendered paste bodyclass Matcher(object): def __init__(self, cls): self.cls = cls def __call__(self, *args): self.children = args return self def __getattr__(self, name): return Matcher(getattr(self.cls, name)) def __repr__(self): return self.cls.__name__ + `self.children`class Pattern(object): def __init__(self, namespace): self.namespace = namespace def __call__(self, func): names = func.func_code.co_names for name in names: try: cls = getattr(self.namespace, name) func.func_globals[name] = Matcher(cls) except: pass return func()class Foo(object): class Test(object): class Omg(object): pass class Foo(object): pass class Bar(object): pass@Pattern(Foo)def testPattern(): return \ Test( Test.Omg(), Foo(), Bar() )print testPattern