Python:动态为内置类添加属性
为什么内置类不管用呢?
用一个子类来解决这个问题是最好的办法吗?还是说这样会遇到一些隐藏的问题呢?
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
内置的类(比如列表和字典)不能随便添加属性,这是为了提高性能,特别是为了节省内存。你希望像 list
和 dict
这样的内置类尽量小,这样才能创建更多的实例。
所以,内置类没有 __dict__
这个字典,正是因为这个字典是用来存放任意属性的。
你可以在自己的类中实现类似的功能。如果你的类是用C语言写的,你只需要不实现 __dict__
的支持。如果是用Python写的,你可以使用 slots。