'A named-based collection of :class:`.ColumnElement` objects
maintained by this :class:`.FromClause`.
The :attr:`.columns`, or :attr:`.c` collection, is the gateway
to the construction of SQL expressions using table-bound or
other selectable-bound columns::
select([mytable]).where(mytable.c.somecolumn == 5)'

@_memoized_property
def columns(self):

    if ('_columns' not in self.__dict__):
        self._init_collections()
        self._populate_column_collection()
    return self._columns.as_immutable()
