Python Feature Request: Add the "using" keyword which works like "with" in Visual Basic

Colin J. Williams cjw at sympatico.ca
Mon Apr 16 10:37:57 EDT 2007


James Stroud wrote:
> samjnaa at gmail.com wrote:
>> Please check for sanity and approve for posting at python-dev.
>>
>> In Visual Basic there is the keyword "with" which allows an object-
>> name to be declared as governing the following statements. For
>> example:
>>
>> with quitCommandButton
>>  .enabled = true
>>  .default = true
>> end with
>>
>> This is syntactic sugar for:
>>
>> quitCommandButton.enabled=true
>> quitCommandButton.default=true
>>
>> This can be very useful especially in GUI programming when we have to
>> type the same object name in line-after-line. I personally found
>> having to type the word "self" umpteen times inside classes very
>> irritating. Such a beautiful language is Python, she should have this
>> good feature from VB too.
>>
>> Now I hear that the word "with" is being discussed for a different
>> purpose in Py 3 as a result of a PEP and I don't want to conflict with
>> that. So I propose the word "using" as a replacement. This also is
>> similar to the C++ "using" keyword which exposes the members of a
>> namespace to access without specifying the namespace scope for each
>> reference. For example after giving "using namespace std;" I can
>> change all references to "std::cout" to "cout", which is similar to
>> what I am proposing for Python now.
>>
>> Some thoughts about how this "using" statement should behave. The word
>> using should be followed by an object name and a colon indicating the
>> start of a block. The object named after "using" must determine the
>> context (or whatever the technical word is) of the of the statements
>> in that block.
>>
>> self.setFixedSize(200, 120)
>> self.quit = QtGui.QPushButton("Quit", self)
>> self.quit.setGeometry(62, 40, 75, 30)
>> self.quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold))
>> self.connect(self.quit, QtCore.SIGNAL("clicked()"), QtGui.qApp,
>> QtCore.SLOT("quit()"))
>>
>> to be rewritten as:
>>
>> using self:
>> __setFixedSize(200,120)
>> __quit = QtGui.QPushButton("Quit", self)
>> __using quit:
>> ____setGeometry(62, 40, 75, 30)
>> ____setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold))
>> __connect(self.quit, QtCore.SIGNAL("clicked()"), QtGui.qApp,
>> QtCore.SLOT("quit()"))
>>
>> [I don't know whether usenet will retain my indenting, so I changed
>> the tabs to underscores.]
>>
>> This context governing may need to be limited to the first applicable
>> member - so that in the above example "self" governs setFixedSize,
>> quit, quit and connect only in each sentence and quit (self.quit)
>> governs setGeometry and setFont only. (Point is that the parser should
>> not search for self.QtGui, self.self or self.QtCore in sentences 3 and
>> 7, and self.quit.QtGui in sentence 6.)
>>
>> Due to my absence of professional experience, my request may be
>> somewhat unpolished technical-wise, but I believe that this is a very
>> useful feature for Python and hence request the technically-
>> knowledgeable to reformat it as necessary. Thank you.
>>
> 
> I like this one for some reason. Just the "using self" would save hella 
> typing in a lot of classes. I would favor a convention with leading dots 
> to disambiguate from other variables. This wouldn't conflict with, say, 
> floats, because variable names can't begin with a number.
> 
> James

Yes, I like the idea too.  It has deeper roots than Visual Basic.  In 
Pascal, Nicklaus Wirth used "with" for record access.

It's an idea that can be used with any object which has attributes. 
The value of an attribute could be a function or a class.

It's a pity that the word "with" was used for a context declaration - 
PEP 343.  On the other hand, I believe "using" has been suggested as 
an alternative, that seems a reasonable alternative.

Colin W.




More information about the Python-list mailing list