From: dmitrey on 9 Aug 2010 06:26 hi all, suppose I have defined a child class of Python dict, currently it constructor looks like that: def __init__(self, *args, **kwargs): dict.__init__(self, *args, **kwargs) #(+some more insufficient code) Constructor should be capable of calling with either any way Python dict is constructed or with a Python dict instance to be derived from; calculations speed is important. So it works well for now, but I want __init__ to set modified values, like this: values_of_the_dict = [some_func(elem) for elem in self.values()] How this could be done? Thank you in advance, Dmitrey.
From: Peter Otten on 9 Aug 2010 06:38 dmitrey wrote: > hi all, > suppose I have defined a child class of Python dict, currently it > constructor looks like that: > def __init__(self, *args, **kwargs): > dict.__init__(self, *args, **kwargs) > #(+some more insufficient code) > > Constructor should be capable of calling with either any way Python > dict is constructed or with a Python dict instance to be derived from; > calculations speed is important. > > So it works well for now, but I want __init__ to set modified values, > like this: > values_of_the_dict = [some_func(elem) for elem in self.values()] > > How this could be done? >>> class D(dict): .... def __init__(self, *args, **kw): .... if args: .... args = ((k, v.upper()) for k, v in args[0]), .... if kw: .... for k in kw: kw[k] = 10*kw[k] .... dict.__init__(self, *args, **kw) .... >>> D(["ab", "cd"], e="f") {'a': 'B', 'c': 'D', 'e': 'ffffffffff'} Replace v.upper() and 10*kw[k] with the appropriate some_func() calls. Personally I would apply the function before passing the data to the dict subclass. Peter
From: dmitrey on 9 Aug 2010 06:44 On Aug 9, 1:38 pm, Peter Otten <__pete...(a)web.de> wrote: > dmitrey wrote: > > hi all, > > suppose I have defined a child class of Python dict, currently it > > constructor looks like that: > > def __init__(self, *args, **kwargs): > > dict.__init__(self, *args, **kwargs) > > #(+some more insufficient code) > > > Constructor should be capable of calling with either any way Python > > dict is constructed or with a Python dict instance to be derived from; > > calculations speed is important. > > > So it works well for now, but I want __init__ to set modified values, > > like this: > > values_of_the_dict = [some_func(elem) for elem in self.values()] > > > How this could be done? > >>> class D(dict): > > ... def __init__(self, *args, **kw): > ... if args: > ... args = ((k, v.upper()) for k, v in args[0]), > ... if kw: > ... for k in kw: kw[k] = 10*kw[k] > ... dict.__init__(self, *args, **kw) > ...>>> D(["ab", "cd"], e="f") > > {'a': 'B', 'c': 'D', 'e': 'ffffffffff'} > > Replace v.upper() and 10*kw[k] with the appropriate some_func() calls. OK, thank you. > Personally I would apply the function before passing the data to the dict > subclass. It's impossible for the situation in hand. D.
|
Pages: 1 Prev: simple renaming files program Next: Decorators without function |