
Alex Martelli <aleaxit@yahoo.com> writes:
On Friday 24 October 2003 12:27 am, Zack Weinberg wrote: ...
Frankly, I wish Python required one to write explicit declarations for all variables in the program:
var x, y, z # module scope
class bar: classvar I, J, K # class variables
Seems like a great way to get uninitialized variables to me.
No, they get a magic cookie value that triggers an exception on use. Which, incidentally, disambiguates the present UnboundLocalError - is that a typo, or is that failure to initialize the variable on this code path? Consider, eg. def foo(x): s = 2 if x: a = 1 return a ...
But then what added value is that 'classvar' boilerplate dirtying things up? Might as well take it off and get I = 2.3 J = (2, 3) K = 23
which is just what we have now. ...
There is absolutely no help (not one minute later, not six months later) "comprehending" the program just because some silly language mandates redundancy, such as a noiseword 'classvar' in front of the assignments.
Understand that I do almost all my programming in typed languages, where that keyword isn't noise, it's a critical part of the declaration. I see where you're coming from with regard to noisewords. There are plausible alternatives, although they're all more complicated to implement and explain, compared to var a, b = 2, c = foo() # a throws UninitializedLocalError if used # before set ... d # throws UnboundLocalError e = 1 # ALSO throws UnboundLocalError But in this domain, I am mostly content with the language as is. I think there really *is* a language deficiency with regard to declaring class versus instance variables. class foo: A = 1 # these are class variables B = 2 C = 3 def __init__(self): self.a = 4 # these are instance variables self.b = 5 self.c = 6 I find this imperative syntax for declaring instance variables profoundly unintuitive. Further, on my first exposure to Python, I thought A, B, C were instance variables, although it wasn't hard to understand why they aren't. People like to rag on the popularity of __slots__ (for reasons which are never clearly spelled out, but never mind) -- has anyone considered that it's popular because it's a way of declaring the set of instance variables, and there is no other way in the language? zw