5 Ways to Print Object Attributes in Python

print object attributes in python

Discover all the methods to print attributes of an object in Python with easy code snippets.

When working with Python objects, sometimes you need to inspect their attributes, especially during debugging or development. This article explores various methods to print object attributes in Python, making them easy to understand. Whether you’re a beginner or an experienced developer, these techniques will enhance your ability to work with Python objects effectively.

What is an Object?

An object is an instance of a class representing a real-world entity with properties (characteristics) and methods (actions). For example, a Book class can create objects like “The Great Gatsby” and “Harry Potter,” each with a unique title, author, publication year, and methods to display this information.

Objects in Python
Python objects and their attributes.

What are Object Attributes?

Object attributes are properties or data that belong to an object. They are used to store information about an object and define its characteristics or state.

Attributes of book objects in Python, including title, author, and year.
Book attributes in Python objects

For example, a Book class can have attributes like title, author, and year. For the book object “Harry Potter and the Sorcerer’s Stone,” the attributes would be title = “Harry Potter and the Sorcerer’s Stone,” author = “J.K. Rowling,” and year = 1997. Each book object has its own unique attribute values.

class Book:
    def __init__(self, title, author, year):
        self.title = title  # Attribute
        self.author = author  # Attribute
        self.year = year  # Attribute

    def display_info(self):  # Method
        print(f"{self.title} by {self.author}, {self.year}")

# Create and display book objects
Book('The Great Gatsby', 'F. Scott Fitzgerald', 1925).display_info()  # Object 1
Book('Harry Potter and the Sorcerer\'s Stone', 'J.K. Rowling', 1997).display_info()  # Object 1

Output

The Great Gatsby by F. Scott Fitzgerald, 1925
Harry Potter and the Sorcerer's Stone by J.K. Rowling, 1997

How to Print all Attributes of an Object in Python

Print an Object’s Attributes and Properties Using Python’s vars()

The vars() function returns a dictionary that lists all the attributes of an object and their current values. This dictionary, called __dict__, helps you see all the information about an object at once. A dictionary in Python is like a list of labeled items, where each label (key) has a a specific value.

Syntax

vars() # without argument
vars(object) # with argument

Example

In the following code, calling the vars() with an object as an argument, like vars(book), it shows a list of the specific details (attributes) of that object. For example, if you use vars(book), it will give you a dictionary of the book object’s attributes, such as its title, author, and year. This dictionary helps you see all the important information stored in the book object in one place. It makes it easy to understand and check the details that are saved in the object.

class Book:
    def __init__(self, title, author, year):
        self.title = title
        self.author = author
        self.year = year

# Create a book object
book = Book('Harry Potter and the Sorcerer\'s Stone', 'J.K. Rowling', 1997)

# Use vars() with the book object to get its attributes
print("\nAttributes of the book object:")
print(vars(book))

Output

Attributes of the book object:
{'title': "Harry Potter and the Sorcerer's Stone", 'author': 'J.K. Rowling', 'year': 1997}

Accessing Object Attributes with the __dict__ Method

The __dict__ attribute is a special dictionary that stores all the details of an object. It holds these details in a dictionary format just like the vars() function returned where each key is the name of an attribute, and each value is the actual value of that attribute. For example, if you have a Book object with attributes like title, author, and year, book.__dict__ would give you a dictionary showing the title, author, and year along with their values. This makes it easy to see all the attributes of an object in one place.

Syntax

object.__dict__

Example

In this example, book.__dict__ shows a dictionary of all the details (attributes) of the book object. When you print book.__dict__, it displays a dictionary where each key is an attribute name (like 'title''author', and 'year'), and each value is the corresponding value for that attribute (like 'Harry Potter and the Sorcerer's Stone''J.K. Rowling', and 1997). This dictionary provides a clear view of all the information stored in the book object.

class Book:
    def __init__(self, title, author, year):
        self.title = title
        self.author = author
        self.year = year

# Create a book object
book = Book('Harry Potter and the Sorcerer\'s Stone', 'J.K. Rowling', 1997)

# Print all attributes
print(book.__dict__)

Output

{'title': "Harry Potter and the Sorcerer's Stone", 'author': 'J.K. Rowling', 'year': 1997}

Using  __dir__() to List Object Attributes

The __dir__() method, gives you a list of everything you can use with an object. It shows all the details and functions related to the object, including its attributes and methods. By default, it provides a complete list of what you can interact with on the object, making it easier to see all the options and features available.

Syntax

object.__dir__()

Example

In the following code, the book.__dir__() lists all the attributes and methods of the book object. This includes its attributes like titleauthor, and year, as well as any methods or functions that the book object can perform. It helps you see all the available options and features of the book object in one place.

class Book:
    def __init__(self, title, author, year):
        self.title = title
        self.author = author
        self.year = year

# Create a book object
book = Book('Harry Potter and the Sorcerer\'s Stone', 'J.K. Rowling', 1997)

# Use __dir__() to list attributes and methods of the book object
print("Attributes and methods of the book object:")
print(book.__dir__())

Output

Attributes and methods of the book object:
['title', 'author', 'year', '__module__', '__init__', '__dict__', '__weakref__', '__doc__', '__new__', '__repr__', '__hash__', '__str__', '__getattribute__', '__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__reduce_ex__', '__reduce__', '__subclasshook__', '__init_subclass__', '__format__', '__sizeof__', '__dir__', '__class__']

NOTE:

__dir__() is a special method used internally by the dir() function to obtain a list of an object’s attributes and methods. By default, dir() calls the object’s __dir__() method to get this list. You can override __dir__() in custom classes to control or filter what attributes and methods appear when dir() is used. Without arguments, dir() lists the names in the current local scope, while with an object, it retrieves the list from the object’s __dir__() method. Basically, __dir__() controls what dir() shows for an object, allowing you to customize what details and options you see about that object.

Viewing Object Attributes in Python with the inspect Module

The inspect module in Python lets you explore the details of classes, functions, and modules. By using it, you can view attributes and methods, which helps you understand and debug code. To use inspect, you need to import it with import inspect.

inspect.getmembers(object)

This function lists all the attributes and methods of an object, showing everything that the object has, including its details and functions. Use it when you want to see a complete list of what you can work with in that object.

Syntax

inspect.getmembers(object)

Example

The code uses inspect.getmembers() to list everything about the book object, including its attributes and methods. After setting up the book object, inspect.getmembers(book) gets a list of everything inside it. This includes attributes like titleauthor, and year, as well as the display_info method. By printing this list, you can see all the elements of the book object and what you can work with.

import inspect

class Book:
    def __init__(self, title, author, year):
        self.title = title
        self.author = author
        self.year = year

    def display_info(self):
        return f"{self.title} by {self.author}, {self.year}"

# Create a book object
book = Book('Harry Potter and the Sorcerer\'s Stone', 'J.K. Rowling', 1997)

# Get all members (attributes and methods) of the book object
members = inspect.getmembers(book)
print("Attributes and methods of the book object:")
print(members)

Output

Attributes and methods of the book object:
[('__class__', <class '__main__.Book'>), ('__delattr__', <method-wrapper '__delattr__' of Book object at 0x7f98b34b6c90>), ('__dict__', {'title': "Harry Potter and the Sorcerer's Stone", 'author': 'J.K. Rowling', 'year': 1997}), ('__dir__', <built-in method __dir__ of Book object at 0x7f98b34b6c90>), ('__doc__', None), ('__eq__', <method-wrapper '__eq__' of Book object at 0x7f98b34b6c90>), ('__format__', <built-in method __format__ of Book object at 0x7f98b34b6c90>), ('__ge__', <method-wrapper '__ge__' of Book object at 0x7f98b34b6c90>), ('__getattribute__', <method-wrapper '__getattribute__' of Book object at 0x7f98b34b6c90>), ('__getstate__', <built-in method __getstate__ of Book object at 0x7f98b34b6c90>), ('__gt__', <method-wrapper '__gt__' of Book object at 0x7f98b34b6c90>), ('__hash__', <method-wrapper '__hash__' of Book object at 0x7f98b34b6c90>), ('__init__', <bound method Book.__init__ of <__main__.Book object at 0x7f98b34b6c90>>), ('__init_subclass__', <built-in method __init_subclass__ of type object at 0x596aac2d5f80>), ('__le__', <method-wrapper '__le__' of Book object at 0x7f98b34b6c90>), ('__lt__', <method-wrapper '__lt__' of Book object at 0x7f98b34b6c90>), ('__module__', '__main__'), ('__ne__', <method-wrapper '__ne__' of Book object at 0x7f98b34b6c90>), ('__new__', <built-in method __new__ of type object at 0x7f98b4066d60>), ('__reduce__', <built-in method __reduce__ of Book object at 0x7f98b34b6c90>), ('__reduce_ex__', <built-in method __reduce_ex__ of Book object at 0x7f98b34b6c90>), ('__repr__', <method-wrapper '__repr__' of Book object at 0x7f98b34b6c90>), ('__setattr__', <method-wrapper '__setattr__' of Book object at 0x7f98b34b6c90>), ('__sizeof__', <built-in method __sizeof__ of Book object at 0x7f98b34b6c90>), ('__str__', <method-wrapper '__str__' of Book object at 0x7f98b34b6c90>), ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x596aac2d5f80>), ('__weakref__', None), ('author', 'J.K. Rowling'), ('display_info', <bound method Book.display_info of <__main__.Book object at 0x7f98b34b6c90>>), ('title', "Harry Potter and the Sorcerer's Stone"), ('year', 1997)]

inspect.getmembers(object, predicate)

This function lists only the attributes and methods of an object that meet a specific condition you set. For example, you can use it to show only methods or only attributes by defining the condition in the predicate. This is useful when you want to filter out and view just certain types of parts from the object, making it easier to find what you’re looking for.

Syntax

inspect.getmembers(object, predicate=inspect.ismethod)
  • predicate: A predicate is a condition you use to filter which attributes or methods you want to see.

Example

The code demonstrates how to use the inspect module to list only the methods of the book object. By calling inspect.getmembers(book, predicate=inspect.ismethod), it filters out and retrieves only the callable methods of the book object, like display_info, while ignoring other attributes. The result is then printed, showing which functions are available to use with the book object.

import inspect

class Book:
    def __init__(self, title, author, year):
        self.title = title
        self.author = author
        self.year = year

    def display_info(self):
        return f"{self.title} by {self.author}, {self.year}"

book = Book('Harry Potter and the Sorcerer\'s Stone', 'J.K. Rowling', 1997)

# Get only callable members (methods) of the book object
callables = inspect.getmembers(book, predicate=inspect.ismethod)
print("Callable members of the book object:")
print(callables)

Output

Callable members of the book object:
[('__init__', <bound method Book.__init__ of <__main__.Book object at 0x7097d53802e0>>), ('display_info', <bound method Book.display_info of <__main__.Book object at 0x7097d53802e0>>)]

Custom Method for Printing Object Attributes

Creating a custom method to display an object’s attributes lets you display its information in an organized and clear way. You can create this method in the class to show the attributes in a simple, readable format. It allows you to control how each attribute is shown, making it easier to understand and debug your objects.

Example

In the following code, the Book class includes a custom method called display_info() to print the attributes of a book object. This method is created within the class and is designed to print the titleauthor, and year attributes in a clear and organized format. The display_info() method is then used by calling it on the book1 object. This approach allows the attributes of book1to be displayed neatly, demonstrating how custom methods can be used to present object attributes clearly.

class Book:
    def __init__(self, title, author, year):
        self.title = title
        self.author = author
        self.year = year

    def display_info(self):  # Custom Method
        print("Title:", self.title)
        print("Author:", self.author)
        print("Year:", self.year)

# Creating book object
book1 = Book("Harry Potter and the Sorcerer's Stone", "J.K. Rowling", 1997)

# Using the custom method to print attributes
book1.display_info()

Output

Title: Harry Potter and the Sorcerer's Stone
Author: J.K. Rowling
Year: 1997

Why Print Object Attributes?

Printing object attributes is useful for several reasons:

  1. Debugging: It helps you verify that the attributes of an object have been correctly set and contain the expected values. This can be crucial for identifying and fixing issues in your code.
  2. Displaying Information: It allows you to present the details of an object in a readable format. For instance, displaying the attributes of a book object helps users quickly see important information like the title, author, and publication year.
  3. Testing: Printing attributes can be part of testing to ensure that methods modifying attributes are functioning correctly and that objects are behaving as intended.
  4. Documentation: It provides a way to document the state of an object during execution, making it easier to understand how objects are evolving over time.

Conclusion

In conclusion, understanding how to print and inspect object attributes in Python is crucial for effective debugging and development. By utilizing methods such as vars()__dict__dir(), and the inspect module, you can easily access and view the properties of your objects. These techniques offer valuable tools for examining and managing the state and characteristics of objects, helping you write more efficient and maintainable code.

Leave a Comment

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

Scroll to Top