class Foo:
def __init__(self, *args):
self.value = args
def __hash__(self):
return hash(self.value)
def __eq__(self, other):
return self.value == other.value
m = {Foo(123): 'abc'}
# Or sub-class
class FooMap(dict):
def __setitem__(self, key, value):
key = Foo(key)
super().__setitem__(key, value)
m = FooMap()
m[123] = ...
m['abc'] = ...
m[True] = ...