Skip to content Skip to sidebar Skip to footer

Python: Dynamically Adding Attributes To A Built-in Class

Why doesn't it work for the built-in classes? Is using a subclass the best approach to fix it, or will I run into some hidden problems? a = {} a.p = 1 # raises AttributeError class

Solution 1:

The builtin classes do not have the ability to have arbitrary attributes. This is done for reasons of performance, especially memory usage, you want the built-in classes like list and dict to be as small as possible so you can have many of them.

Therefore the built-in classes do not have the __dict__ dictionary that is needed for arbitrary attributes to work.

You can achieve the same for your classes. If they are written in C you simply do not implement the __dict__ support. If they are written in Python you use slots.

Solution 2:

If you want to subclass dict you can always use UserDict (here the documentation).

And it works with what you're trying to do:

from collections import UserDict

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

Post a Comment for "Python: Dynamically Adding Attributes To A Built-in Class"