首页 > 解决方案 > 如何在包含基于json键的self关键字的类中定义__init__函数

问题描述

我有一个 json str,其中包含一个来自 API 的名为“self”的键。通常希望将字典传递给一个类,但是给定的键之一(self)会导致问题。没有惊喜。但我不知道如何解决它。

我的课看起来像这样:

class Issue:
    def __init__(self, expand, fields, key, self):
        self.expand = expand
        self.assignee = fields['assignee']['displayName']
        self.key = key
        self.self = self
    
    @classmethod
    def from_json(cls, json_dict):
        return cls(**json_dict)

要实例化我写的对象:

Issue.from_json(json_dictionary)

我收到无法修复的类型错误:

TypeError: __init__() got multiple values for argument 'self'

我已经尝试过带有前导下划线等的不同版本,但这无济于事。如果我这样做:

class Issue:
    def __init__(self, expand, fields, key, aSelf):
        self.expand = expand
        self.assignee = fields['assignee']['displayName']
        self.key = key
        self.self = aSelf
    
    @classmethod
    def from_json(cls, json_dict):
        return cls(**json_dict)

错误消息保持不变。您能否向我解释如何处理此类问题?

标签: pythonjsonrest

解决方案


调用方法的第一个参数self只是一个约定。名字并不特别。从技术上讲,您不必这样称呼它。如果您有充分的理由,您可以将其称为其他名称:

def __init__(self_, expand, fields, key, self):
    self_.expand = expand
    self_.assignee = fields['assignee']['displayName']
    self_.key = key
    self_.self = self

推荐阅读