gpt4 book ai didi

python - 钩子(Hook)类型转换为 Python 中的字典

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:19 25 4
gpt4 key购买 nike

简而言之,我有一个 Session 类继承自 dict(事实上,这个类覆盖了 flask.SecureCookieSession 类)。我还有一个客户端代码正在做这样的事情:

session_data = dict(session)

我想以某种方式 Hook 此 到 dict 转换,以便在序列化之前注入(inject)几行修改 session 数据的代码。我如何在 Python 中执行此操作?

UPD:澄清一下:我不想从 dict() 调用中返回任何不同于 dict 对象的东西。我只希望此调用在获取数据以将其转换为 dict 对象之前调用我的 session 对象的一个​​特殊方法。类似于 __to_dict(self) 钩子(Hook)。

最佳答案

如果我们看一下 source code for dict我们可以看到,当使用 dict 子类调用 dict 时,没有调用任何用户方法:

int
PyDict_Merge(PyObject *a, PyObject *b, int override)
{
/* ... */
if (PyDict_Check(b)) {
other = (PyDictObject*)b;
/* ...
Only other->ma_keys and other->ma_values are used.
No user-defined methods/attributes are accessed.
...
*/
}
/* ... */
}

这是 CPython 特定的性能优化。

为了能够检测到您的字典何时被复制,您应该避免从 dict 继承,而是提供一个类似映射的对象。考虑从 MutableMapping 继承或 UserDict .

关于python - 钩子(Hook)类型转换为 Python 中的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32250380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com