def _delegate_methods(receiver, target):
    """Delegate target's public methods to receiver."""
    receiver_methods = frozenset(dir(receiver))
    target_methods = frozenset(dir(target))
    forward_methods = target_methods.difference(receiver_methods)
    for method in forward_methods:
        if not method.startswith('_'):
            ref = getattr(target, method)
            setattr(receiver, method, ref)
