为什么它不适用于内置类?
使用子类是解决它的最佳方法,还是会遇到一些隐藏的问题?
a = {}
a.p = 1 # raises AttributeError
class B(dict):
pass
b = B()
b.p = 1 # works
编辑:我原来的评论认为它对b
不起作用是不正确的(我犯了一个错误)。
答案 0 :(得分:4)
内置类无法拥有任意属性。这是出于性能原因,特别是内存使用的原因,您希望list
和dict
这样的内置类尽可能小,因此您可以拥有其中许多类。
因此,内置类没有任意属性所需的__dict__
字典。
您可以为您的课程实现相同的目标。如果它们是用C语言编写的,那么您根本就不会实现__dict__
支持。如果它们是用Python编写的,那么使用slots。
答案 1 :(得分:0)
如果您想要dict
的子类,则可以始终使用UserDict
(here the documentation)。
它适用于你想要做的事情:
from collections import UserDict
a = UserDict()
a.p = 10 # works fine