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

James Stroud jstroud at mbi.ucla.edu
Sat Apr 14 13:02:53 CEST 2007


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



More information about the Python-list mailing list