Some code and descriptions:
# name_space.py
class Class1(object):
    var1 = 11
    def f1(self):
        print Class1.var1  # this will OK
        print var1  # this will be an error
def func_1():
    var1 = 11
    def func_2():
        print var1  # here will be OK
    func_2()
So, as we can see:
- Define a function in a class, the inner function doesn't have the ability to access the variables directly in the outer class. (We can still access the variables with the class name).
 - Define a function in a function, the inner function has the ability to access the variables directly in the outer function.
 
More codes:
# name_space2.py
class A(object):
    def f1(self):
        def f2():            
            print f1  # this will be an error
            print A.f1  # this will OK
        f2()
So, why python use different scope mechanisms in function and class?