首页 > 解决方案 > 在 Python 中更新实例变量时出现意外行为

问题描述

我在更新其中一个实例变量时遇到问题。下面是代码片段:

class DataFormatting:

    def __init__(self):
        self.default_dict = dict()
        # default values
        self.default_model = {'message': 'Please try after some time'}
        self.default_dict['statusCode'] = 500
        self.default_dict['body'] = {'type': 'lead',
                                                'status': self.default_dict['statusCode'],
                                                'model': self.default_model}

        self.default_dict['headers'] = {'Content-Type': 'application/json'}

    def get_response(self):
        return self.default_dict

    def set_response(self, status_code, final_response):
        self.default_dict['statusCode'] = status_code
        self.default_dict['body']['model'] = final_response

ob = DataFormatting()
ob.set_response(200, {'key1': 'value1'})
ob.get_response()

输出:

{'statusCode': 200,
 'body': {'type': 'lead', 'status': 500, 'model': {'key1': 'value1'}},
 'headers': {'Content-Type': 'application/json'}}

虽然键“statusCode”更新为200,但“body”中的“status”仍然是500。我应该如何解决这个问题?

标签: pythonpython-3.xoop

解决方案


正文中的状态是在创建对象时配置的。要在调用 ' ' 时更新它,您还set_response需要包含一个更新命令body.status

 def set_response(self, status_code, final_response):
        self.default_dict['statusCode'] = status_code
        self.default_dict['body']['model'] = final_response

        self.default_dict['body']['status'] = status_code

上面 set_response 中的代码更改应该可以修复它。但是,理想情况下,您应该创建一个“update_status”方法来处理整个对象的状态更新


推荐阅读