'Initialize a new Configurable variable.
@param key      the configuration key (eg "filebrowser.foo")
@param default  the default value
@param dynamic_default a lambda to use to calculate the default
@param required whether this must be set
@param help     some text to print out for help
@param type     a callable that coerces a string into the expected type.
str is the default. Should raise an exception in the case
that it cannot be coerced.
@param private  if True, does not emit help text'

def __init__(self, key=_ANONYMOUS, default=None, dynamic_default=None, required=False, help=None, type=str, private=False):

    if (not callable(type)):
        raise ValueError(("%s:    The    type    argument    '%s()'    is    not    callable" % (key, type)))
    if ((default is not None) and (dynamic_default is not None)):
        raise ValueError(('Cannot    specify    both    dynamic_default    and    default    for    key    %s' % key))
    if ((dynamic_default is not None) and (not dynamic_default.__doc__) and (not private)):
        raise ValueError(("Dynamic    default    '%s'    must    have    __doc__    defined!" % (key,)))
    if ((pytype(default) in (int, long, float, complex, bool)) and (not isinstance(type(default), pytype(default)))):
        raise ValueError(("%s:    '%s'    does    not    match    that    of    the    default    value    %r    (%s)" % (key, type, default, pytype(default))))
    if (type == bool):
        LOG.warn(("%s    is    of    type    bool.    Resetting    it    as    type    'coerce_bool'.    Please    fix    it    permanently" % (key,)))
        type = coerce_bool
    self.key = key
    self.default_value = default
    self.dynamic_default = dynamic_default
    self.required = required
    self.help = help
    self.type = type
    self.private = private
    assert (not (self.required and self.default)), 'Config    cannot    be    required    if    it    has    a    default.'
