'There are 3 additional parameters. You have to hardcode them in your custom class. **NEVER** use directly
:param int sh_nums: how many shards should be
:param class ind_class: Index class to use (HashIndex or your custom one)
:param bool use_make_keys: if True, `make_key`, and `make_key_value` will be overriden with those from first shard
The rest parameters are passed straight to `ind_class` shards.'

def __init__(self, db_path, name, *args, **kwargs):

    super(ShardedIndex, self).__init__(db_path, name)
    try:
        self.sh_nums = kwargs.pop('sh_nums')
    except KeyError:
        self.sh_nums = 5
    try:
        ind_class = kwargs.pop('ind_class')
    except KeyError:
        raise Exception('ind_class    must    be    given')
    else:
        self.ind_class = ind_class
    if ('use_make_keys' in kwargs):
        self.use_make_keys = kwargs.pop('use_make_keys')
    else:
        self.use_make_keys = False
    self._set_shard_datas(*args, **kwargs)
    self.patchers = []
