最佳答案
如果没有对 dict 进行子类化,那么需要将哪些类视为映射,以便将它们传递给具有 **
的方法。
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
至少到了它抛出缺少映射功能的错误的地步,因此我可以开始实现。
我回顾了模拟容器类型,但是简单地定义魔法方法没有任何效果,并且使用 ABCMeta
覆盖和注册它作为一个 dict 将断言作为子类验证,但是没有通过 isinstance(o, dict)
。理想情况下,我甚至不想使用 ABCMeta
。