On Sat, 26 Jul 2008 11:08:12 +0200, Nikolaus Rath wrote: > Terry Reedy <[EMAIL PROTECTED]> writes: ... >> Because you must prefix self attributes with 'self.'. If you do not use >> any attributes of the instance of the class you are making the function >> an instance method of, then it is not really an instance method and >> need not and I would say should not be masqueraded as one. If the >> function is a static method, then it should be labeled as one and no >> 'self' is not needed and auto insertion would be a mistake. In brief, I >> assume the OP wants 'self' inserted in the body because inserting it >> only in the parameter list and never using it in the body is either >> silly or wrong. > > > I think you misunderstood him. What he wants is to write > > > class foo: > def bar(arg): > self.whatever = arg + 1 > > > instead of > > class foo: > def bar(self, arg) > self.whatever = arg + 1 > > > so 'self' should *automatically* only be inserted in the function > declaration, and *manually* be typed for attributes.
That idea might have worked many years ago, but not now. The problem is, what happens here? class Foo(object): def foo(self, arg): self.whatever = arg + 1 @classmethod def cfoo(cls, arg): cls.whatever = arg - 1 @staticmethod def sfoo(arg): print arg How does the compiler know to insert "self" into the argument list for foo, "cls" into that of cfoo, but do nothing for sfoo? Decorators can transform methods in arbitrarily complex ways using the Descriptor protocol. -- Steven -- http://mail.python.org/mailman/listinfo/python-list