类内的python eval

类内的python eval,python,python-2.7,Python,Python 2.7,我必须编写大量Python代码,如下所示: class MyClass(object): ... ... ... def handle_request(self, request): attr1 = self.__get_attr1(request) self.__validate_attr1(attr1) attr2 = self.__get_attr2(request) self.__valid

我必须编写大量Python代码,如下所示:

class MyClass(object):
    ...
    ...
    ...
    def handle_request(self, request):
        attr1 = self.__get_attr1(request)
        self.__validate_attr1(attr1)

        attr2 = self.__get_attr2(request)
        self.__validate_attr2(attr2)

        attr3 = self.__get_attr3(request)
        self.__validate_attr1(attr3)
        ...
        ...
        ...
        attrn = self.__get_attrn(request)
        self.__validate_attrn(attr1)
class MyClass(object):
    ...
    ...
    ...
    def handle_request(self, request):
        attr_list = ('attr1', 'attr2', 'attr3', ..., 'attrn');
        for a in attr_list:
            locals()[a] = eval('self.__get_{}(request)'.format(a))
            eval('self.__validate_{}'.format(a)
为了让我的生活更轻松,我想我可以做以下几点:

class MyClass(object):
    ...
    ...
    ...
    def handle_request(self, request):
        attr1 = self.__get_attr1(request)
        self.__validate_attr1(attr1)

        attr2 = self.__get_attr2(request)
        self.__validate_attr2(attr2)

        attr3 = self.__get_attr3(request)
        self.__validate_attr1(attr3)
        ...
        ...
        ...
        attrn = self.__get_attrn(request)
        self.__validate_attrn(attr1)
class MyClass(object):
    ...
    ...
    ...
    def handle_request(self, request):
        attr_list = ('attr1', 'attr2', 'attr3', ..., 'attrn');
        for a in attr_list:
            locals()[a] = eval('self.__get_{}(request)'.format(a))
            eval('self.__validate_{}'.format(a)
但是,当我运行此代码时,会出现以下错误:

AttributeError: 'MyClass' object has no attribute '__get_attr1'

很明显,我遗漏了一些重要的东西,但我不确定到底是什么

要回答您没有问的问题,您可以尝试以下方法,而不是使用
eval

class MyClass(object):
    ...
    def __init__(self):
        self.attr_list = [self.__get_attr1, ..., self.__get_attrn]
        self.validate_list = [self.__validate_attr1, ..., self.__validate_attrn]
    ...
    def handle_request(self, request):
        attrs = [get(request) for get in self.attr_list]
        for validate in self.validate_list:
            validate(request)

在使用
\uuu get\u attr1
之前,您显然没有定义它的值。@beIsaac假设已经定义了\uuu get\u attr方法。我可以,但很遗憾,您的程序不能这样做。您是否可以通过
eval
之外的任何其他方式访问
\u get\u attr1
?@beIsaac其他方式是什么意思?比如在使用eval之前简单地打印它,
print(self.\u get\u attr1)
或者只是
getattr(self,attribute\u name)