[Python-Dev] New syntax for 'dynamic' attribute access (original) (raw)
Ben North ben at redfrontdoor.org
Mon Feb 12 15:40:53 CET 2007
- Previous message: [Python-Dev] New syntax for 'dynamic' attribute access
- Next message: [Python-Dev] New syntax for 'dynamic' attribute access
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Apologies: I overlooked a couple of replies in my summary earlier. Tim Delaney and Terry Reedy both responded in positive terms to the one-argument form and its syntax, and in negative terms to the two-argument form.
Also, I missed the fact that Neil Toronto had made the same point as me when he said:
I'm not sure the "looks like a syntax error" argument holds much weight, because any new syntax is likely to be a syntax error until the syntax is changed. :)
he also suggested:
obj.*strexpression
but I'm a bit uneasy about this, although the similarity with C's dereferencing is in its favour. Also, '*' in python is already used for "and the rest" arguments in function calls.
Anthony Baxter cooled off a bit on the idea too:
after thinking about it a bit, I'm still not convinced this is something that needs shorthand syntax
Maybe not, but for the cases where you do want to do dynamic attribute access, I think there is a win in readability from nested getattr and/or setattr calls.
Georg Brandl:
-1 here too. I fear that this gets too indistinguishable from normal calling syntax,
I think, from the context, that this is "-1" on the syntax rather than the idea as a whole, but I could have misread Georg's message. Possibly a "-0" on the idea?
Greg Ewing:
In my experience, the amount of code which truly needs to use getattr is extremely small.
Another "-0"?
Gustavo Carneiro:
-1 from me. It does not solve a common problem, therefore it does not deserve a special syntax.
It's not that uncommon, judging by the c.600 uses in the existing library code.
Moreover, the existing syntax may be longer to type but is far more readable.
I disagree, although I can see that there might be a small time during which one is getting familiar with the new syntax. Others have voiced the opinion that it's a readability win.
Tim Delaney asked in particular:
Have you checked if [the existing uses of getattr, where "getattr" in that scope is a function argument with default value the built-in "getattr"] are intended to bring the "getattr" name into local scope for fast lookup, or to force a binding to the builtin "gettattr" at compile time (two common (ab)uses of default arguments)? If they are, they would be better served by the new syntax.
They're all in Lib/codecs.py, and are of the form:
class StreamRecoder:
def __getattr__(self, name,
getattr=getattr):
""" Inherit all other methods from the underlying stream.
"""
return getattr(self.stream, name)
Without digging deeper into that code I'm afraid I can't say precisely what is going on.
Ben.
- Previous message: [Python-Dev] New syntax for 'dynamic' attribute access
- Next message: [Python-Dev] New syntax for 'dynamic' attribute access
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]