code: def with_options(
              self, codec_options=None, read_preference=None,
              write_concern=None, read_concern=None):
          
          return Collection(self.__database,
                            self.__name,
                            False,
                            codec_options or self.codec_options,
                            read_preference or self.read_preference,
                            write_concern or self.write_concern,
                            read_concern or self.read_concern)
docs: Get a clone of this collection changing the specified settings.
  
            >>> coll1.read_preference
            Primary()
            >>> from pymongo import ReadPreference
            >>> coll2 = coll1.with_options(read_preference=ReadPreference.SECONDARY)
            >>> coll1.read_preference
            Primary()
            >>> coll2.read_preference
            Secondary(tag_sets=None)
  
          :Parameters:
            - `codec_options` (optional): An instance of
              :class:`~bson.codec_options.CodecOptions`. If ``None`` (the
              default) the :attr:`codec_options` of this :class:`Collection`
              is used.
            - `read_preference` (optional): The read preference to use. If
              ``None`` (the default) the :attr:`read_preference` of this
              :class:`Collection` is used. See :mod:`~pymongo.read_preferences`
              for options.
            - `write_concern` (optional): An instance of
              :class:`~pymongo.write_concern.WriteConcern`. If ``None`` (the
              default) the :attr:`write_concern` of this :class:`Collection`
              is used.
            - `read_concern` (optional): An instance of
              :class:`~pymongo.read_concern.ReadConcern`. If ``None`` (the
              default) the :attr:`read_concern` of this :class:`Collection`
              is used.