Built with Tutify.io

    AIStudyLabs

    Python difference between __str__ and __repr__?

    Python difference between __str__ and __repr__?

    What is the difference between str and repr in Python? The __str__ and __repr__ methods are two commonly used "dunder" (double underscore) methods that can be used to define how an object is represented as a string.

    Both methods, str and repr, generate a string representation of an object, but they serve different purposes and people use them in different contexts.

    In this article, we will explore the differences between __str__ and __repr__, when to use each method, and provide examples of how to implement them in your Python code.

    <a id="h-1-examples-of-str-and-repr"></a>

    1. Examples of str() and repr()

    Before getting into the details of __str__ and __repr__ , let's see where it can be useful. The str() function returns a string representation of the object that is meant to be human-readable

    The repr() function, on the other hand, returns a string representation of the object that is meant to be unambiguous and complete.

    
    my_list = [1, 2, 3]
    print(str(my_list)) 
    # '[1, 2, 3]'
    
    print(repr(my_list)) 
    # '[1, 2, 3]'
    

    In the example above you have seen how these two methods, give the same output. But there are some differences between these two, which we will see in the upcoming section.

    <a id="h-2-what-is-str-in-python"></a>

    2. What is str in Python?

    The __str__ method is a special method in Python that defines a human-readable string representation of an object. It is called automatically when the object is printed or passed to the str() function.

    The purpose of the __str__ method is to provide a concise and easy-to-understand string representation of the object, intended for humans rather than machines.

    See the following Example of using the __str__ method:

    
    class ProgrammingLanguage:
        def __init__(self, name, year, designed_by):
            self.name = name
            self.designed_by = designed_by
    
        def __str__(self):
            return f"{self.name} by {self.designed_by}"
    
    object= ProgrammingLanguage("Python", "Guido van Rossum")
    print(python)  
    
    # Output: "Python by Guido van Rossum"
    

    In the above example the __str__ method is used to convert a Python Object to a string representation. We have overridden the __str__ method.

    <a id="h-3-what-is-repr-in-python"></a>

    3. What is repr in Python?

    The __repr__ is also used to define a string representation of an object, typically for debugging or logging purposes. This method is called "repr" which stands for "representation". It returns a string representation of an object that can be used to recreate the object.

    The __repr__ method is called when the repr() function is used on an object or when the object is printed in the Python REPL. The string returned by the __repr__ method should be a valid Python expression that, when evaluated, would create an object identical to the original object.

    
    class ProgrammingLanguage:
        def __init__(self, name, year, designed_by):
            self.name = name
            self.designed_by = designed_by
        
        def __repr__(self):
            return f"ProgrammingLanguage('{self.name}' ,'{self.designed_by}')"
    
    python = ProgrammingLanguage("Python","Guido van Rossum")
    print(repr(python)) 
    # Output: "ProgrammingLanguage('Python', 'Guido van Rossum')"
    

    <a id="h-4-difference-between-str-and-repr"></a>

    4. Difference Between str and **repr**

    Both the __str__ and __repr__ methods in Python are used to define string representations of objects, but they serve slightly different purposes.

    The following Table summarizes the differences between __str__ and __repr__ in Python:

    | | str | repr | | --- | --- | --- | | Purpose | Human-readable | Formal and unambiguous | | When called | str() function | repr() function, object printed in REPL | | String representation | Readable but incomplete | Complete and valid Python expression | | Format | Should be easy to read by humans | Does not need to be easy to read by humans | | Example | "ProgrammingLanguage(name='Python')" | main.ProgrammingLanguage object at 0x… | | Usage | Used for user-friendly display of an object | Used for debugging, logging, and re-creating an object | | Returns | A string representing the object's state or values | A string that, when evaluated, can be used to re-create the object | | Customization | Can be customized to improve object representation | Can be customized to improve object representation or debugging output | | Fallback | If __str__ is not defined, uses __repr__ | If __repr__ is not defined, uses a default representation of the object |

    <a id="h-5-examples-of-str-and-repr"></a>

    5. Examples of str and repr

    Some examples of when you might want to use str:

    <a id="h-5-1-example-1"></a>

    5.1 Example 1

    A class that represents a user profile, you might want to define __str__ and __repr__ to return the user's name, email, and a short bio.

    
    class UserProfile:
        def __init__(self, name, email, bio):
            self.name = name
            self.email = email
            self.bio = bio
        
        def __str__(self):
            return f"{self.name} ({self.email}): {self.bio}"
        
        def __repr__(self):
            return f"UserProfile(name={self.name}, email={self.email}, bio={self.bio})"
    

    <a id="h-5-2-example-2"></a>

    5.2 Example 2

    If you have a class that represents a book, you might want to define __str__ and __repr__ to return the book's title, author, and publication date.

    
    class Book:
        def __init__(self, title, author, publication_date):
            self.title = title
            self.author = author
            self.publication_date = publication_date
        
        def __str__(self):
            return f"\"{self.title}\" by {self.author} ({self.publication_date})"
        
        def __repr__(self):
            return f"Book(title={self.title}, author={self.author}, publication_date={self.publication_date})"
    

    <a id="h-5-3-example-3"></a>

    5.3 Example 3

    If you have a class that represents a product, you might want to define __str__ and __repr__ to return the product's name, price, and description.

    
    class Product:
        def __init__(self, name, price, description):
            self.name = name
            self.price = price
            self.description = description
        
        def __str__(self):
            return f"{self.name}: ${self.price} - {self.description}"
        
        def __repr__(self):
            return f"Product(name={self.name}, price={self.price}, description={self.description})"
    

    <a id="h-6-summary-and-conclusion"></a>

    6. Summary and Conclusion

    In conclusion, the difference between str and repr is an important concept in Python to understand. You use str to define a human-readable string representation of an object, and you use repr to define a formal and unambiguous string representation of an object.

    Remember, str is for human-readable string representations, while repr is for unambiguous and machine-readable string representations. If you have any questions leave them in the comment section.

    Happy coding!

    <a id="h-related-articles"></a>

    Related Articles