The hasattr() function helps check if an object has a specific attribute. It takes two parameters:

  • The object – this can be any Python data type like strings, dictionaries, and lists.
  • The name of the attribute/property as a string.

The function returns True if the object has the attribute and False if it does not.

Example: 

				
					class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2

obj = MyClass(1, 2)

print(hasattr(obj, 'attr1')) # True
print(hasattr(obj, 'attr3')) # False

				
			

We can also use the getattr() function to get the value of an attribute. It takes three parameters:

  • The object – any Python data type
  • The name of the attribute/property as a string
  • An optional default value (in case the attribute doesn’t exist)

If the object has the attribute, it will return its value. If not, it will return None or the default value you have provided. 

Example:

				
					class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2

obj = MyClass(1, 2)

print(getattr(obj, 'attr1', 'default')) # 1
print(getattr(obj, 'attr3', 'default')) # 'default'

				
			

Note that both hasattr() and getattr() will raise an AttributeError exception if the attribute does not exist and no default value is provided to getattr().

How to List All Attributes of an Object

To list all attributes of an object in Python, you can use the dir() function. This function returns a list of all object attributes and methods, including user-defined attributes and attributes that are part of the object’s class or type.

Example:

				
					class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        self.attr3 = 3

obj = MyClass(1, 2)
print(dir(obj))

				
			

This will output a list of all attributes and methods of the obj object, including attr1, attr2, and attr3.

				
					['__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__', 'attr1', 'attr2', 'attr3']

				
			

Note that the list returned by dir() includes attributes and methods that are part of the object’s class or type, such as __init__ and __str__. To see only the user-defined attributes of the object, you can filter the list using a list comprehension or filter function:

				
					user_defined_attributes = [attr for attr in dir(obj) if not 
attr.startswith('__')]
print(user_defined_attributes)

				
			

This will output a list of only the user-defined attributes of the obj object:

				
					['attr1', 'attr2', 'attr3']

				
			

How to List the Instantiated Object Attribute Values

To list the attribute values of an instantiated object in Python, you can use the vars() function. This function returns a dictionary of the object’s attributes and their corresponding values.

For example:

				
					class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2

obj = MyClass(1, 2)
print(vars(obj))

				
			

This will output a dictionary of the object’s attributes and their values:

				
					{'attr1': 1, 'attr2': 2}

				
			

Alternatively, you can also access the attributes directly using dot notation, like this:

				
					class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2

obj = MyClass(1, 2)
print(obj.attr1) # 1
print(obj.attr2) # 2

				
			

Note that the vars() function will only return attributes defined on the object itself, not those inherited from its class or type. To see all object attributes, including inherited attributes, you can use the dir() function as described in the previous answer.

As you’ve seen, there are multiple ways to see if an object has an attribute in Python. These include using the standard hasttrfunction or getattr function.
With both methods, you can use a try-except block to handle any errors that may occur gracefully. However, remember that just because an object has an attribute doesn’t mean it will work as expected. So always test your code before deploying it to ensure it meets your expectations.


Thanks for reading. Happy coding!