In order for the "splat" operator to work, the type of the object must populate slot `tp_as_mapping` with a struct of this type: https://docs.python.org/3/c-api/typeobj.html#c.PyMappingMethods and have some non-null implementations of the methods this struct is supposed to contain.
I can do this in C, but I cannot think of a way to do this in Python proper. Defining all the methods mentioned in PyMappingMethods doesn't seem to do it. You could try to research this further, and if, indeed defining all the methods of PyMappingMethods on the Python side doesn't produce an object that behaves like a proper mapping, you could probably file a bug report for that. -- https://mail.python.org/mailman/listinfo/python-list