Where does a class closure live?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Gerard Brunick

    #1

    Where does a class closure live?

    Consider:

    ### Function closure example

    def outer(s):
    .... def inner():
    .... print s
    .... return inner
    ....
    >>f = outer(5)
    >>f()
    5
    >>dir(f)
    ['__call__', '__class__', '__delattr__', '__dict__', '__doc__',
    '__get__', '__getattribute __', '__hash__', '__init__', '__module__',
    '__name__', '__new__', '__reduce__', '__reduce_ex__' , '__repr__',
    '__setattr__', '__str__', 'func_closure', 'func_code', 'func_defaults' ,
    'func_dict', 'func_doc', 'func_globals', 'func_name']

    ### Class instance closure example
    >>def outer2(s):
    .... class Inner(object):
    .... def __call__(self):
    .... print s
    .... return Inner()
    ....
    >>f = outer2(10)
    >>f()
    10
    >>dir(f)
    ['__call__', '__class__', '__delattr__', '__dict__', '__doc__',
    '__getattribute __', '__hash__', '__init__', '__module__', '__new__',
    '__reduce__', '__reduce_ex__' , '__repr__', '__setattr__', '__str__',
    '__weakref__']

    ##### Class closure example
    >>def outer3(s):
    .... class Inner(object):
    .... def __call__(self):
    .... print s
    .... return Inner
    ....
    >>F = outer3(15)
    >>f = F()
    >>f()
    15
    >>dir(F)
    ['__call__', '__class__', '__delattr__', '__dict__', '__doc__',
    '__getattribute __', '__hash__', '__init__', '__module__', '__new__',
    '__reduce__', '__reduce_ex__' , '__repr__', '__setattr__', '__str__',
    '__weakref__']


    Now the closure for the function live in func_name. I've even done the
    exercise where I build a dummy inner function that returns its closed
    variable, so that I can use that thing to reach through "cells" and
    check out the variables living in the closure object. Where are the
    closure variables for the class instance, and the class? Can I get my
    hands on them in Python?
    -Gerard
Working...