class Foo:
    def __init__(self, value):
        self.value = value
    def __hash__(self):
        return hash(self.value)
    def __eq__(self, other):
        return self.value == other.value
class FooMap(dict):
    def __setitem__(self, key, value):
        key = Foo(key)
        super().__setitem__(key, value)
m = FooMap()
m[123] = ...
m['abc'] = ...
m[True] = ...