Op 2006-02-03, [EMAIL PROTECTED] schreef <[EMAIL PROTECTED]>: >> First of all, you are using a really poor example of a "method", >> since it doesn't use any attributes of the Foo instance. > > Agreed. I tried to post a short example, and it obviously was to short > to make my point clear. lets take a longer one. Current syntax: > > class Pair: > def __init__(self, a,b): > self.a = a > self.b = b > > def sum(self): > return self.a + self.b > > def product (this): > return this.a + this.b > > My alternative syntax suggestion would be this one: > > class Pair: > def self.__init__(a,b): > self.a = a > self.b = b > > def self.sum(): > return self.a + self.b > > def this.product (): > return this.a + this.b > >> You are really giving "self" a magic meaning with your suggestion >> which isn't needed at all. > > No. I hope this is clearer in the example above. "self" shouldn't be a > keyword. It's a special kind of argument now, so why shouldn't we > explicitly _declare_ that it's a special kind of argument? (as explicit > is better than implicit)
Self is not a special kind of argument. It is the accessing of the method that provides for the magic. Simplified one could say the following is happening. def _Pair__init__(self, a, b): self.a = a self.b = b def _Pair_sum(self): return self.a + self.b def _Pair_product(this): return this.a * this.be class Pair: def __init__(self, ...): self.__init__ = BoundMethod(self, _Pair__init__) self.sum = BoundMethod(self, _Pair_sum) self.product = BoundMethod(self, _Pair_product) self.__init__(...) So when p is an instance of Pair, p.sum is not your defined function but a BoundMethod. -- Antoon Pardon -- http://mail.python.org/mailman/listinfo/python-list