class Klass(object): def __getattr__(self, name): """ Locate the function with the dotted attribute. """ def traverse(parent, child): if instance(parent, str): parent = getattr(self, parent) return getattr(parent, child) return reduce(traverse, name.split('.'))