'Return a composite column-based property for use with a Mapper.
See the mapping documentation section :ref:`mapper_composite` for a full
usage example.
The :class:`.MapperProperty` returned by :func:`.composite`
is the :class:`.CompositeProperty`.
:param class\_:
The "composite type" class.
:param \*cols:
List of Column objects to be mapped.
:param active_history=False:
When ``True``, indicates that the "previous" value for a
scalar attribute should be loaded when replaced, if not
already loaded.  See the same flag on :func:`.column_property`.
.. versionchanged:: 0.7
This flag specifically becomes meaningful
- previously it was a placeholder.
:param group:
A group name for this property when marked as deferred.
:param deferred:
When True, the column property is "deferred", meaning that it does not
load immediately, and is instead loaded when the attribute is first
accessed on an instance.  See also :func:`~sqlalchemy.orm.deferred`.
:param comparator_factory:  a class which extends
:class:`.CompositeProperty.Comparator` which provides custom SQL clause
generation for comparison operations.
:param doc:
optional string that will be applied as the doc on the
class-bound descriptor.
:param info: Optional data dictionary which will be populated into the
:attr:`.MapperProperty.info` attribute of this object.
.. versionadded:: 0.8
:param extension:
an :class:`.AttributeExtension` instance,
or list of extensions, which will be prepended to the list of
attribute listeners for the resulting descriptor placed on the class.
**Deprecated.**  Please see :class:`.AttributeEvents`.'

def __init__(self, class_, *attrs, **kwargs):

    self.attrs = attrs
    self.composite_class = class_
    self.active_history = kwargs.get('active_history', False)
    self.deferred = kwargs.get('deferred', False)
    self.group = kwargs.get('group', None)
    self.comparator_factory = kwargs.pop('comparator_factory', self.__class__.Comparator)
    if ('info' in kwargs):
        self.info = kwargs.pop('info')
    util.set_creation_order(self)
    self._create_descriptor()
