8.10: Debugging
- Page ID
- 17102
It is legal to add attributes to objects at any point in the execution of a program, but if you are a stickler for type theory, it is a dubious practice to have objects of the same type with different attribute sets. It is usually a good idea to initialize all of an object’s attributes in the init method.
If you are not sure whether an object has a particular attribute, you can use the built-in function hasattr
(see Section 15.7).
Another way to access the attributes of an object is through the special attribute __dict__
, which is a dictionary that maps attribute names (as strings) and values:
>>> p = Point(3, 4) >>> print p.__dict__ {'y': 4, 'x': 3}
For purposes of debugging, you might find it useful to keep this function handy:
def print_attributes(obj): for attr in obj.__dict__: print attr, getattr(obj, attr)
print_attributes
traverses the items in the object’s dictionary and prints each attribute name and its corresponding value.
The built-in function getattr
takes an object and an attribute name (as a string) and returns the attribute’s value.