0

attr 从生成的__init__方法的属性名称中去除前导下划线。有没有办法为特定属性覆盖它,而不是完全禁用类的自动生成初始化方法?

我想使用attr类来表示 MongoDB 文档,它在 Python 中是带有_id记录唯一 ID 的键的字典。我希望能够拥有一个仅比 .from_db(cls, doc)多一点的类方法return cls(**doc),但是存在_id原因“TypeError:init () got an unexpected keyword argument '_id'”。现在,我通过声明 `_id: attr.ib(init=False, default=None) 来解决它,并具有:

@classmethod from_db(cls, doc):
    _id = doc["_id"]
    del(doc["_id"])
    obj = cls(**doc)
    obj._id = _id
    return obj

但这似乎真的很糟糕。有没有更好的办法?

4

1 回答 1

0

目前不可能,抱歉。

看:

从长远来看,您可能会遇到更复杂的异常,然后像 cattrs 这样的工具更有意义。

于 2021-02-02T14:48:58.240 回答