首页 > 解决方案 > 在 attrs 自动生成的 init 方法签名中禁用前导下划线删除

问题描述

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

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

标签: python-attrs

解决方案


目前不可能,抱歉。

看:

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


推荐阅读