相关疑难解决方法(0)

从字典初始化Python数据类

假设我想初始化以下数据类

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)

python

25
推荐指数
3
解决办法
3万
查看次数

如何修复 Python 中数据类的 TypeError?

我有一个具有 5 个属性的数据类。当我通过字典给出这些属性时,效果很好。但是当字典的属性多于类的属性时,类会给出 TypeError。我试图让当有额外的值时,类不会关心它们。我怎样才能做到这一点?

\n\n
from 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)\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误是:

\n\n
TypeError: __new__() got an unexpected keyword argument \'city\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望该类在这种情况下正常工作,没有任何错误。我不想将这些额外的属性添加到类中。

\n

python python-3.x python-dataclasses

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

python-3.x ×1

python-dataclasses ×1