Add inspect.getenclosed to return/yield source code for nested classes and functions

I propose adding a function into inspect module that will retrieve definitions of classes and functions (standard and lambdas) located inside another function/method. In my opinion this would a small but nice and useful addition to the standard library. It can be implemented using a couple of undocumented function from that module (findsource and getblock) without any performance drawbacks. Example: In [9]: print(getsource(function)) def function(): class inner_class(): def __init__(self): return # Some code # Some more code # Even more code l = lambda x: 42 # Ugh code again def inner_function(with_argument): pass In [10]: for c in function.__code__.co_consts: ....: if not iscode(c): ....: continue ....: name, starts_line = c.co_name, c.co_firstlineno ....: if not name.startswith('<') or name == '<lambda>': ....: lines, _ = findsource(c) ....: source = ''.join(getblock(lines[starts_line-1:])) ....: print(dedent(source), end='-' * 30 + '\n') ....: class inner_class(): def __init__(self): return ------------------------------ l = lambda x: 42 ------------------------------ def inner_function(with_argument): pass ------------------------------ What do you think?
participants (1)
-
Un Do