我想使用一个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__
给出与给定键相关的值。据我所知,这就足够实现功能了吗?在
目前没有回答
相关问题 更多 >
编程相关推荐