On 5/10/2018 3:58 PM, stefano wrote:
I know that "self" parameter have been discussed a lot, but still I didn't find this proposal. If it was instead take my sincere apologies and please forget this mail.
The disturbing part of the "self parameter" is the asymmetry of the definition and the call.
You are free to use the full signature of the method by calling the method on the class, where it is defined. Self *is* a parameter of the function and therefore *is* part of its signature.
l = [] l.append(1) list.append(l, 2) l [1, 2]
Note that you can make a function defined outside of any class a method of some class by making it an attribute of the class. An intelligent editor like IDLE changes the call signature tip according to the call form. "l.append(" brings up "(object, /)" while "list.append(" brings up "(self, object, /)", along with a note explaining that '/' marks the preceding arguments as positional-only.
So I was thinking: why not do define the methods like: "def self.whatevermethod(par1, par2, etc)" instead of "def whatevermethod(self, par1, par2, etc)"?
This or something like it has been proposed and rejected before.
This will allow the call and the definition to be written exactly in the same way, still leaving the "clarity" of the additional input for the function.
When you call 'self.method', you are not calling type(self).method. You are instead calling the bound method 'self.method', which has the abbreviated signature. This proposal would create an asymmetry between the function definition and the call of the function. -- Terry Jan Reedy