
On 6/23/2014 8:06 AM, Stefano Borini wrote:
Dear all,
At work we use a notation like LDA[Z=5] to define a specific level of accuracy for our evaluation. This notation is used just for textual labels, but it would be nice if it actually worked at the scripting level, which led me to think to the following: at the moment, we have the following
class A: ... def __getitem__(self, y):
This actually says that y can be passed by position or name ;-)
... print(y) ...
a=A() a[2] 2
a.__getitem__(y=2) 2
a[2,3] (2, 3) a[1:3] slice(1, 3, None) a[1:3, 4] (slice(1, 3, None), 4)
I would propose to add the possibility for a[Z=3], where y would then be a dictionary {"Z": 3}. In the case of a[1:3, 4, Z=3, R=5], the value of y would be a tuple containing (slice(1,3,None), 4, {"Z": 3}, {"R": 5}). This allows to preserve the ordering as specified (e.g. a[Z=3, R=4] vs a[R=4, Z=3]).
As others have pointed out, you are not actually asking that __getitem__ 'accept keyword arguments'. Rather you are asking that "x=y" be seen as an abbreviation for "{'x':y}" in a very rare usage in a particular context to save 4 (admittedly awkward) keystrokes. The resulting confusion is not worth it. Saving 4 of 7 might seem worth it, but it real cases, like "precision=4" versus "{'precision':4}" the ratio is lower. I also wonder whether you might sometimes us the same spec in multiple subscriptings, so that you might define "p = {'precision': 4}" once and use it multiple times. In your introductory paragraph, you only specify one optional parameter -- accuracy. So it is not clear why you do not just write a .get(self, ob, accuaracy=default) method. If their are multiple options, make them keyword only. -- Terry Jan Reedy