def __init__(self, namespace=None, key=None, conn=None, **kwargs):
self.namespace = namespace or "<STR_LIT>"<EOL>if not key:<EOL><INDENT>raise RedisORMException("<STR_LIT>")<EOL><DEDENT>self.key = key<EOL>self.conn = conn or redis<EOL>if not self.conn:<EOL><INDENT>raise RedisORMException("<STR_LIT>")<EOL><DEDENT>self._data = RedisKeys(conn=self.conn, namespace=self.namespace, key=self.key)<EOL>if kwargs:<EOL><INDENT>for item in kwargs:<EOL><INDENT>if item not in self._protected_items and item[<NUM_LIT:0>] != "<STR_LIT:_>":<EOL><INDENT>setattr(self, item, kwargs[item])<EOL><DEDENT><DEDENT><DEDENT>self.finish_init()<EOL>
TODO: Me

:param namespace: The key prefix which should be used.
:param key: The key or id of this object.
:param conn: The redis connection to use. This can also be set on the
    class instance, or on the module level.
:param kwargs: Any additional data which should be stored. This is used
    for creating a new object in redis.
:raised RedisORMException: If no connection or key was supplied, or if there
    was a problem while creating the :py:class:`.RedisKeys` instance for
    the interal `_data`