# -*- coding: utf-8 -*- def ccall(func, pass_name=False): """ def arguments(): pass res = func(False, None, 3, key="word", arguments=arguments)`` # becomes class res(ccall(func), False, None, 3): key = "word" def arguments(): pass """ class metaclass(type): def __new__(cls, name, a, d): d.pop("__module__", 0) if pass_name: d["__name__"] = name return func(*a[1:], **d) def __call__(*a, **d): return func(*a, **d) return type.__new__(metaclass, func.__name__, (), {}) def pin(loc, *skip): """ def __init__(self, will, *have, **all): def the(): pass variables = 1 del but pin(locals()) these = 2 """ loc = dict(loc) loc.pop("self").__dict__.update( { k: v for k, v in loc.items() if not any( s is k or s is True and k.startswith("_") or s is v and isinstance(s, object) for s in skip ) } )