Fredrik Lundh wrote: > "chosechu" wrote: > > > Yes, if I could simply modify myfunc() I would have workarounds. > > This would mean me modifying SOAPpy and specializing it for > > my needs. > > maybe you could fake it: > No you cannot fake it, because the ** form of passing arguments constructs a new dictionary (and that dictionary is the standard built-in type of dictionary, not your own fake-dictionary).
Just did some tests, redefining the dict-type: >>> native_dict = dict >>> type({}) == native_dict True >>> class my_dict(native_dict): ... pass ... >>> dict = my_dict >>> type({}) == native_dict True >>> type(dict()) == native_dict False >>> def foo(**kwargs): ... print type(kwargs) == native_dict ... >>> foo(x=1) True >>> foo(**dict()) True >>> (NB: I also tried changing __builtins__.dict, no effect) As the OP said, when passing keyword-arguments, a new instance of a built-in dict is always generated and not the dict type bound to the dict-constructor. I do actually think that it would be useful in many circumstances to be able to replace the default-constructor of a particular so that custom objects are created for that type. OTOH, there are probably many more cases where doing so would be a very bad idea, not a good idea, and we would begin seeing an overwhelming number of cases of mis-use of such feature. Cheers, --Tim -- http://mail.python.org/mailman/listinfo/python-list