python-attrs - 在 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
但这似乎真的很糟糕。有没有更好的办法?
解决方案
目前不可能,抱歉。
看:
从长远来看,您可能会遇到更复杂的异常,然后像 cattrs 这样的工具更有意义。
推荐阅读
- oracle - Oracle ORA01858 比较日期为空
- c++ - 如何在 64 位 Windows 上使用 Cygwin 编译 32 位 C++ 程序
- javascript - 将 MultiSelect 数据发送到 Modal
- reactjs - 保护私有反应组件
- ruby-on-rails - 如何通过自己的样式扩展引导程序?
- sql - 为什么从 YYYYMMDD 到 YYYY-MM-DD 的 sql 日期转换不会失败?
- node.js - NextAuth:使用 OAuth 授权对 Twitter API 的调用
- ubuntu - VS Code 在带有 Lubuntu 20.04 Lxqt 的 VirtualBox 上冻结
- pip - Sounddevice 在 Windows 10 上使用 Python 3.7.7 (x64) 导入失败
- heroku - 用 CC 验证了我的免费帐户,仍然无法使用 sendgrid。不支持电话号码