should "self" be changed?

zipher dreamingforward at gmail.com
Tue May 26 23:15:25 EDT 2015


On Tuesday, May 26, 2015 at 11:57:44 AM UTC-5, Laura Creighton wrote:
> In a message of Tue, 26 May 2015 09:37:29 -0700, zipher writes:
> >Would it be prudent to rid the long-standing "argument" (pun unintended) about self and the ulterior spellings of it, by changing it into a symbol rather than a name?  
> >
> >Something like:
> >
> >class MyClass(object):
> >
> >    def __init__(@):
> >        @.dummy = None
> >
> >OR, even better, getting *rid of it* in the parameter list, so it stops confusing people about how many parameters a method needs, and transform it into a true *operator*.
> >
> >class MyClass(object):
> >
> >    def __init__(): #takes no arguments!
> >        @.dummy = None  #the @ invokes the class object's dictionary
> >
> >That would seem to be a nice solution to the problem, really.  It doesn't become PERLish because you've made it into a genuine operator -- "self" was always a non-variable that looked like a variable and hence created an itch that couldn't be scratched.
> >
> >Anyone else have any thoughts?
> 
> Guido did.  :)
> http://neopythonic.blogspot.se/2008/10/why-explicit-self-has-to-stay.html

Nice link, thanks.

I see the problem.  I was under the false impression that Python's lexer built an *abstract syntax tree* (see wikipedia for a nice description) like C does so that lexical items like functions and objects are defined.  As it stands now, Python doesn't even seem to know what an *expression* is.

Guido hasn't defined his language so that an object is defined lexically, so he's cheating a little by requiring "self" to be passed in.  If Python were to be defined more completely, all his points in reference to Bruce Eckel's suggestion would be moot.  A method would automatically (not auto*magically*) know what class they are in.

Mark



More information about the Python-list mailing list