Defines multiple @properties dynamically for an instance rather than a class.

def define_properties(obj, props):
    """Defines multiple @properties dynamically for an instance rather than a class."""
    cls = obj.__class__
    dct = {
        '__doc__': cls.__doc__
    }

    for name, defn in list(props.items()):
        if is_callable(defn):
            defn = property(defn)
        elif not hasattr(defn, '__get__'):
            defn = property(*defn)
        dct[name] = defn

    obj.__class__ = type(cls.__name__, (cls, ), dct)