def require_any(inst, owner, name, *parents):
    """Raises a (nicely explained) type error if owner is not a subclass of at least one parent.

    It is useful when making sure that a certain type of property is only used within
    certain classes.

    Parameters
    ----------
    inst
        instance of a property object.
    owner : type
        class of an object.
    name : str
        name of the attribute to which the property object is assigned.
    parents : iterable of type
        classes that owner must inherit at least one.

    Raises
    ------
    TypeError
        If owner does not inherit at least from one parents.

    """
    for parent in parents:
        if issubclass(owner, parent):
            break
    else:
        raise TypeError(
            '%r is a %r but %r is not a subclass from any of %r as required' %
            (name, inst.__class__.__name__, owner.__name__, parents))
