Possible Duplicate:
Why can't I directly add attributes to any python object?
Why can't you add attributes to object in python?
The following code does not throw AttributeError
class MyClass():
def __init__(self):
self.a = 'A'
self.b = 'B'
my_obj = MyClass()
my_obj.c = 'C'
That contrasts with
>>> {}.a = 'A'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'a'
What makes such difference? Is it about dict being a built-in class while MyClass being user defined?
The difference is that instances of user-defined classes have a dictionary of attributes associated with them by default. You can access this dictionary using vars(my_obj)
or my_obj.__dict__
. You can prevent the creation of an attribute dictionary by defining __slots__
:
class MyClass(object):
__slots__ = []
Built-in types could also provide an attribute dictionary, but usually they don't. An example of a built-in type that does support attributes is the type of a function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With