Without subclassing dict, what would a class need to be considered a mapping so that it can be passed to a method with **
from abc import ABCMeta
class uobj:
__metaclass__ = ABCMeta
uobj.register(dict)
def f(**k): return k
o = uobj()
f(**o)
# outputs: f() argument after ** must be a mapping, not uobj
At least to the point where it throws errors of missing functionality of mapping, so I can begin implementing.
I reviewed emulating container types but simply defining magic methods has no effect, and using ABCMeta to override and register it as a dict validates assertions as subclass, but fails isinstance(o, dict). Ideally, I dont even want to use ABCMeta.
The
__getitem__()
andkeys()
methods will suffice:If you're trying to create a Mapping — not just satisfy the requirements for passing to a function — then you really should inherit from
collections.Mapping
. As described in the documentation, you need to implement just:The Mixin will implement everything else for you:
__contains__
,keys
,items
,values
,get
,__eq__
, and__ne__
.