On Wednesday 27 May 2015 02:37, zipher wrote: > 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?
No. > 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*. I think you misspelled a word. There's no "be", "tt" or "er" in "worse" :-) All joking aside, I cannot imagine why you think that the first argument to a method should be considered an operator. It's an argument, a named variable, not an operator. > class MyClass(object): > > def __init__(): #takes no arguments! But that is completely wrong. __init__ DOES take a single argument -- the instance. Methods, it can be either bound to the instance or unbound: py> str.upper("hello world") # unbound method, self provided explicitly 'HELLO WORLD' py> "hello world".upper() # bound method, self provided automatically 'HELLO WORLD' I suggest you study these two examples carefully. > @.dummy = None #the @ invokes the class object's dictionary It certainly shouldn't do that. It should invoke the full attribute lookup machinery, which does far more than invoke the class __dict__. In fact, if it invoked the class __dict__, that would *completely* break the object oriented paradigm. Writing to the class __dict__ means that all instances share the same value. > 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. That is completely wrong. self is, and always has been, a real variable. That's why you can call it anything you like -- self is just the convention, nothing more. -- Steven -- https://mail.python.org/mailman/listinfo/python-list