Python:动态为内置类添加属性

0 投票
2 回答
503 浏览
提问于 2025-04-17 10:08

为什么内置类不管用呢?

用一个子类来解决这个问题是最好的办法吗?还是说这样会遇到一些隐藏的问题呢?

a = {}
a.p = 1 # raises AttributeError
class B(dict):
  pass
b = B()
b.p = 1 # works

补充:我之前说它对 b 不管用是错的(我搞错了)。

2 个回答

0

如果你想要创建一个字典的子类,可以使用 UserDict这里有相关文档)。

而且它可以很好地满足你的需求:

from collections import UserDict

a = UserDict()
a.p = 10 # works fine
4

内置的类(比如列表和字典)不能随便添加属性,这是为了提高性能,特别是为了节省内存。你希望像 listdict 这样的内置类尽量小,这样才能创建更多的实例。

所以,内置类没有 __dict__ 这个字典,正是因为这个字典是用来存放任意属性的。

你可以在自己的类中实现类似的功能。如果你的类是用C语言写的,你只需要不实现 __dict__ 的支持。如果是用Python写的,你可以使用 slots

撰写回答