首页 > 解决方案 > 如何使缺失的变量自动创建?

问题描述

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

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: global name 'a' is not defined。变量 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)

此代码将无错误地运行。但这不是解决方案。

标签: pythonooppython-2.x

解决方案


推荐阅读