Как вы делаете Python 'Eval' только в контексте объекта?

Можно ли сделать что-то вроде

c = MyObj()
c.eval("func1(42)+func2(24)")

в Python ... т.е. чтобы func1 () и func2 () оценивались в рамках объекта 'c' (если бы они были функциями-членами в пределах этого определения класса)? Я могу'сделать простой анализ, так как для моего приложения eval-строки могут быть сколь угодно сложными. Я полагаю, что использование магии с модулем ast могло бы сработать, но из-за недостатка литературы по ast яЯ не уверен, где искать:

import ast

class MyTransformer(ast.NodeTransformer):
    def visit_Name(self, node):
        # do a generic_visit so that child nodes are processed
        ast.NodeVisitor.generic_visit(self, node)
        return ast.copy_location(
            # do something magical with names that are functions, so that they become 
            # method calls to a Formula object
            newnode,
            node
        )

class Formula(object):

    def LEFT(self, s, n):
        return s[:n]

    def RIGHT(self, s, n):
        return s[0-n:]

    def CONCAT(self, *args, **kwargs):
        return ''.join([arg for arg in args])

def main():

    evalString = "CONCAT(LEFT('Hello', 2), RIGHT('World', 3))"

    # we want to emulate something like Formula().eval(evalString)
    node = ast.parse(evalString, mode='eval')
    MyTransformer().visit(node)

    ast.fix_missing_locations(node)
    print eval(compile(node, '', mode='eval'))    

Ответы на вопрос(4)

Ваш ответ на вопрос