<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_feature(self, obj=None, geometry=None, properties=None):
 """ Adds a given feature. If obj isn't specified, geometry and properties can be set as arguments directly. Parameters: - **obj**: Another feature instance, an object with the \_\_geo_interface__ or a geojson dictionary of the Feature type. - **geometry** (optional):
 Anything that the Geometry instance can accept. - **properties** (optional):
 A dictionary of key-value property pairs. """

        properties = properties or {}
        if isinstance(obj, Feature):
            # instead of creating copy, the original feat should reference the same one that was added here
            feat = obj._data
        elif isinstance(obj, dict):
            feat = obj.copy()
        else:
            feat = Feature(geometry=geometry, properties=properties).__geo_interface__
        self._data["features"].append(feat)