假设我想初始化以下数据类
from dataclasses import dataclass
@dataclass
class Req:
id: int
description: str
Run Code Online (Sandbox Code Playgroud)
我当然可以通过以下方式做到这一点:
data = make_request() # gives me a dict with id and description as well as some other keys.
# {"id": 123, "description": "hello", "data_a": "", ...}
req = Req(data["id"], data["description"])
Run Code Online (Sandbox Code Playgroud)
但是,考虑到我需要的键始终是字典的子集,我是否可以通过字典解包来完成此操作?
req = Req(**data) # TypeError: __init__() got an unexpected keyword argument 'data_a'
Run Code Online (Sandbox Code Playgroud) 我有一个具有 5 个属性的数据类。当我通过字典给出这些属性时,效果很好。但是当字典的属性多于类的属性时,类会给出 TypeError。我试图让当有额外的值时,类不会关心它们。我怎样才能做到这一点?
\n\nfrom dataclasses import dataclass\n\n@dataclass\nclass Employee(object):\n name: str\n lastname: str\n age: int or None\n salary: int\n department: str\n\n def __new__(cls, name, lastname, age, salary, department):\n return object.__new__(cls)\n\n def __post_init__(self):\n if type(self.age) == str:\n self.age = int(self.age) or None\n\n def __str__(self):\n return f\'{self.name}, {self.lastname}, {self.age}\' \n\ndic = {"name":"abd\xc3\xbclmutallip", \n"lastname":"uzunkavaka\xc4\x9fac\xc4\xb1alt\xc4\xb1ndauzan\xc4\xb1ro\xc4\x9flu", \n"age":"24", "salary":2000, "department":"\xc4\xb0K", \n"city":"istanbul", "country":"tr", "adres":"yok", "phone":"0033333"}\n\na = Employee(**dic)\nprint(a)\nRun Code Online (Sandbox Code Playgroud)\n\n错误是:
\n\nTypeError: __new__() got an unexpected keyword argument \'city\'\nRun Code Online (Sandbox Code Playgroud)\n\n我希望该类在这种情况下正常工作,没有任何错误。我不想将这些额外的属性添加到类中。
\n