'Construct a :class:`.TypeDecorator`.
Arguments sent here are passed to the constructor
of the class assigned to the ``impl`` class level attribute,
assuming the ``impl`` is a callable, and the resulting
object is assigned to the ``self.impl`` instance attribute
(thus overriding the class attribute of the same name).
If the class level ``impl`` is not a callable (the unusual case),
it will be assigned to the same instance attribute \'as-is\',
ignoring those arguments passed to the constructor.
Subclasses can override this to customize the generation
of ``self.impl`` entirely.'

def __init__(self, *args, **kwargs):

    if (not hasattr(self.__class__, 'impl')):
        raise AssertionError("TypeDecorator    implementations    require    a    class-level    variable    'impl'    which    refers    to    the    class    of    type    being    decorated")
    self.impl = to_instance(self.__class__.impl, *args, **kwargs)
