Python __dir__ VS __dict__ Examples

Python offers several tools for introspection and attribute management. Two commonly used attributes, `__dir__` and `__dict__`, often cause confusion due to their overlapping functionalities. Understanding their nuances can significantly enhance your Python programming prowess.

1. Getting to Know `__dir__` and `__dict__`.

1.1 `__dir__`.

  1. The `__dir__` method returns a list of attributes for an object, showcasing all the valid attributes that can be used on the object.
  2. It provides a comprehensive view of the available methods and properties that can be accessed.
  3. However, it does not reveal the values stored within the attributes, rather it just provides the attribute names.

1.2 `__dict__`.

  1. The `__dict__` attribute, on the other hand, returns a dictionary that holds the namespace of the object.
  2. It provides a mapping of attribute names to their corresponding values.
  3. This makes it useful for accessing and manipulating the actual values stored within the attributes.

2. Understanding the Differences with Examples.

2.1 Example 1: Using `__dir__`.

  1. Source code.
    class ExampleClass:
        def __init__(self):
            self.name = 'John'
            self.age = 30
    
        def custom_method(self):
            return 'This is a custom method.'
    
    def test_dir():    
        # Using __dir__ to list available attributes
        print(dir(ExampleClass))
    
    if __name__ == "__main__":
        test_dir()
  2. You can see the custom_method method in the above python code execution output.
    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', 
    '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'custom_method']

2.2 Example 2: Using `__dict__`.

  1. Source code.
    class ExampleClass:
        def __init__(self):
            self.name = 'John'
            self.age = 30
    
        def custom_method(self):
            return 'This is a custom method.'
    
    def test_dict():
        # Using __dict__ to access attribute values
        obj = ExampleClass()
        print(obj.__dict__)
    
    if __name__ == "__main__":
        test_dict()
  2. Below is the above example source code execution output.
    {'name': 'John', 'age': 30}

3. Conclusion.

  1. In summary, both `__dir__` and `__dict__` serve distinct purposes in Python.
  2. While `__dir__` provides a list of available attributes, `__dict__` offers direct access to the attribute values stored within an object.
  3. Understanding when to use each of these attributes can greatly improve your ability to inspect and manipulate objects within Python.

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.