HashMap implementation in Python
Initialization of store as a list of None does not really buy you anything in terms of efficiency, but complicates the code quite a bit. I recommend to initialize it with empty lists instead.
put iterates the list twice. A single pass is sufficient:

    for i in list_at_index:
        if i == p:
            i.value = p.value
            return
    list_at_index.append(p)
    self.size += 1

store has 16 slots, but key_hash % 15 returns only 15 possible values. The last slot is never used.
Absence of delete is somewhat questionable.