[Python-ideas] PEP: Shorthand Symbol for "self"

Terry Reedy tjreedy at udel.edu
Mon Aug 25 05:22:49 CEST 2008



Russ Paielli wrote:
...
> instance for which it is called. What I will say is that I think Python 
> syntax could be significantly simplified with the simple little 
> convention that I am proposing. All I ask is that you carefully read my 
> proposal before you reply. Thank you.

I have.  It strikes me as an improvement over .attr and other ideas 
posted on c.l.p.

     In Python, the class instance for which a method is called is
     referred to within the method by the first formal argument.

Somehow awkward.

     By convention, that first argument is typically named "self".

For public code among English speakers.  But how far this extends and 
for how long, given Unicode identifiers in 3.0, is a moot point for your 
proposal.

     In Python, class instance methods are functions in which the first
     formal argument refers to the instance for which the method was
     called.

In Python, class instance methods are functions accessed as an attribute 
of the class, in particular of the object passed as the first argument. 
  To me your discussion is weakened by the implication that Python has a 
method class separate from functions.  (Bound methods are specialized 
partial-function wrappers; functools.partial is the general version.) 
For instance

     could even work for regular functions if the first argument is an
     object with attributes and/or methods that can be accessed with
     standard "dot" notation.

Def statements produce functions.  Period.

     This proposal takes no position of
     whether the latter should be allowed or not.

To repeat: former *is* latter with a particular access path.  So the 
question is not whether to 'allow' $ to work in functions; that *is* 
your proposal, whether you know it or not.  To do otherwise would 
require some other significant change to Python, one that would 
complicate it.

      Four possible candidates for the choice of that symbol are "~",
     "@", "^", and "$".

You left out "?" (not too good ;-) and now, in 3.0, "`" (backtick, no 
longer an repr synonym).  The latter is lighter than "$" but perhaps 
more visible than ".", depending on the font.  Hmmm, a comparison:

self.d = sqrt(self.x*self.x + self.y*self.y)

s.d = sqrt(s.x*s.x + s.x*s.x)

.d = sqrt(.x*.x + .y*.y)

$d = sqrt($x*$x + $y*$y)

`d = sqrt(`s*`x + `y*`y)

I think I like this last best.

Terry Jan Reedy




More information about the Python-ideas mailing list