On 6/8/2010 2:18 AM, Terry Reedy wrote:
On 6/7/2010 6:03 PM, Peter Otten wrote:
The following experiment shows that you only need to implement a
keys() and
__getitem__() method.
$ cat kw.py
class A(object):
def keys(self): return list("ab")
def __getitem__(self, key):
return 42
def f(**kw):
print(kw)
f(**A())
$ python kw.py
{'a': 42, 'b': 42}
However, if you have A inherit from dict...
$ cat kwd.py
class A(dict):
def keys(self): return list("ab")
def __getitem__(self, key):
return 42
def f(**kw):
print(kw)
f(**A())
$ python kwd.py
{}
it stops working -- probably a side-effect of some optimization.
So if you change your hubDict's base class from dict to object you should
get the desired behaviour.
In 2.6, the requirement changed from '(subclass of) dictionary' to
'mapping' so this is a bit strange. It sort of looks like a bug. I will
test with 3.1 tomorrow (later today, actually).
Verified and report filed at
http://bugs.python.org/issue8945
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list