On Wed, Jun 20, 2012 at 1:51 PM, Yury Selivanov <yselivanov.ml at gmail.com> wrote: > What if instead of 'optional', we have 'base_signature' > (or 'from_signature')? > > sig = signature(func) > params = OrderedDict(tuple(sig.parameters.items())[1:]) > new_sig = Signature(params, base_signature=sig) > > And for Paramater: > > param = sig.parameters['foo'] > > param1 = Parameter('bar', base_parameter=param) > param2 = Parameter('spam', annotation=int, base_parameter=param) > param3 = Parameter(base_parameter=param) > param4 = Parameter(default=42, base_parameter=param) > > So 'base_parameter' will be a template from which Parameter's constructor > will copy the missing arguments. Good thought (and better than my initial idea), but I'd follow the model of namedtuple._replace and make it a separate instance method: sig = signature(f) new_sig = sig.replace(parameters=sig.parameters.values()[1:]) param = sig.parameters['foo'] param1 = param.replace(name='bar') param2 = param.replace(name='spam', annotation=int) param3 = param.replace() # namedtuple._replace also allows this edge case param4 = param.replace(default=42) Such a copy-and-override method should be the last piece needed to make immutable Signature objects a viable approach. Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4