On 4/19/2011 10:58 AM, Gerald Britton wrote:
serve method unless it is qualified. I now understand the Python does
not consider a class definition as a separate namespace as it does for
function definitions.
Class namespaces are separate namespaces but not in the same way as for
functions. Class bodies are executed, once, in the new class namespace
when the class statement is executed. That new namespace is then
attached to the new class object. Function bodies are not executed when
the function statement is executed, but are merely compiled for repeated
execution later, when the function is called.
It might help to know:
1. In early Python, nested functions could *not* access the namespace of
enclosing functions.
2. Functions do not *belong* to a particular class. The following two
snippets are equivalent:
a = 'out'
class C:
a = 'in'
def f():
print(C.a)
C.f()
# prints 'in'
a = 'out'
class C:
a = 'in'
def f():
print(C.a)
C.f = f
C.f()
#prints 'in'
3. Default argument expressions *are* executed in the namespace where
the def statement appears. The following two snippets are *not* equivalent
a = 'out'
class C:
a = 'in'
def f(x=a): print(x)
C.f()
# prints 'in'
a = 'out'
class C:
a = 'in'
def f(x=a): print(x)
C.f = f
C.f()
# prints 'out'
--
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list