On Apr 23, 2006, at 4:59 PM, Panos Laganakos wrote: > Thanks Ben. > > What does it mean that they're statically bound? > > It seems weird that I'm not able to access variables in the class > namespace even though these attributes come into existance after class > instantiation. >
The parameters are "put together" and bound to the method when the class is defined, *not* after class instantiation. As an example: >>> class MyClass: ... def my_method(self, param1 = []): ... print param1 ... param1.append(5) ... >>> x = MyClass() >>> x.my_method() [] >>> x.my_method() [5] >>> y = MyClass() >>> y.my_method() [5, 5] >>> y.my_method() [5, 5, 5] >>> Usually, people use immutable datatypes as default parameter values, so it doesn't cause a problem. And an even more illustrative example: >>> class M: ... x = 2 ... def my_method(self, param = M.x): ... pass ... Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in M NameError: name 'M' is not defined The class is still being built when the method is created, so even the name "M" doesn't exist yet. Ben's solution is probably the best way to do what you're looking for. Jay P. -- http://mail.python.org/mailman/listinfo/python-list