Python自定义映射类**解包和“keys”属性

2024-09-27 07:20:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用一个SimpleNameSpace,它也可以作为一个映射,以便能够与**解包一起使用。在

以下是我所做的:

class MySimpleNameSpace(object):
    # my initial attempt subclassed SimpleNameSpace and Mapping, with
    # possibility to use MySimpleNameSpace as a dict as well as a normal SimpleNameSpace.

    def __init__(self, **kw):
        self.__dict__.update(kw)

    def __getitem__(self, item):
        return getattr(self, item)

    def keys(self):
        return self.__dict__.keys()

目前为止还不错:

^{pr2}$

给出:{'a': 42}

更棘手的是:

ns.__getitem__ = "what"
ns.__iter__ = "da"
f(**ns)

现在给出:

{'a': 42, '__getitem__': "what", '__iter__', "da" }

但是:

ns.keys = "douh"
f(**ns)

很明显:

TypeError: attribute of type 'str' is not callable

如果有这样一个自定义映射类,但能够使用keys作为一个普通属性,这是否可行?在

我意识到子类化(Mutable)Mapping实际上使这更困难,如果可能的话,但是我认为这都是因为功能显然需要给定的对象有一个keys方法,如果我们找不到解决方法,这是很不幸的。在

据我所知:迭代(__iter__)dict给出它的键,然后__getitem__给出与给定键相关的值。据我所知,这就足够实现功能了吗?在


Tags: selfreturndefaskeysitemwhatmapping

热门问题