如何使丢失的变量自动创建?

时间:2019-08-28 22:50:16

标签: python oop python-2.x

我需要实现一个表达式,例如:

def expr():
    return a

必须使用exec进行调用: exec(expr.__code__, expenv) 其中expenv是继承ordereddict的类的实例。所有丢失的变量必须自动创建。

我尝试覆盖__missing__方法,但是它不起作用。

from collections import OrderedDict


class ExprGlobals(OrderedDict):

    def __init__(self):
        super(ExprGlobals, self).__init__()

    def __missing__(self, key):
        self[key] = 7
        return self[key]


def expr():
    return a


expenv = ExprGlobals()
exec (expr.__code__, expenv)

输出为 NameError:未定义全局名称'a'。 变量a应该自动创建,并且等于7。

from collections import OrderedDict


class ExprGlobals(OrderedDict):

    def __init__(self):
        self['a'] = 7
        super(ExprGlobals, self).__init__()

    def __missing__(self, key):
        self[key] = 7
        return self[key]


def expr():
    return a


expenv = ExprGlobals()
exec (expr.__code__, expenv)

此代码将正确运行。但这不是解决方案。

0 个答案:

没有答案