充当**拆包映射的类

发布于 2021-01-29 15:23:39

如果没有子类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

关注者
0
被浏览
43
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    __getitem__()keys()方法就足够了:

    >>> class D:
            def keys(self):
                return ['a', 'b']
            def __getitem__(self, key):
                return key.upper()
    
    
    >>> def f(**kwds):
            print kwds
    
    
    >>> f(**D())
    {'a': 'A', 'b': 'B'}
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看