https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_b964594d3d957944241961017b9eb19bf02834de44cce93d8e67dd306852dbe346167181e455e33d5268ea01d973d77bb056848546f31794f31a4c31a9da5aa3.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_23f1ae74c634d7e5e0a067c22b7a8c2d79c3ffd9a3b9395fc82c1b3b99635552b994f1f72f532f28ceaff1ea054ea026cd488cd62fa03a4ad91d212b5f3c5a72.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_e6b7e0bf68aa4a61d5c6a0065ec42e38a0cc53e39a4fbee057b72d4b2297b37c01e716e1e61bac7f240b5a0edbb178d37b62f7ed4ea4ea3d10e46dbe7429f326.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_bfff9e63e857e9ee612e292d4a6edf3ced64d6a756925c953a9d8f77845ff601eca64d73dfa48756b1a9f4a4d6de6127a273bcde16ddeb71a22383460f4e94b0.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f4dd7e1d73ae5eda35ed5ad6aa965b612dbf483ece3ca50c1e8e30ad8dff1c66a160ed75e958e2db399661d229874783e0834ad813a479437035666b8e9e3386.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_4fce0769137d4cd096989b0349bc3c2bbfca79ac311fdf714c41ab24d87551c7b49b756c8a8de090b0714a0ad0560e49fa532ba5a88875ea4afd78efac464df6.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_85cec8b07d60426b11040e471babca0d2f9c8dc87a9b56e06cad39828f7f67179e29609100f282a574872c9a93fb635b25416300eb4c97bc5a653d00cf6f8dbf.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_6768e5a27d4d357347338621c0d20bd269b126d30eec796193390f2f530fbaea60af84130c46f9786114be65149e661e87d55c339219c90aa76396d7e5b734ef.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_2acd6bdff3b680341e8c727da5169a647123eb8fd0a90253161b4c3af272c15d293bf9bb217008bb13f84d1910b0e166798001f8603b6c026d5c20a76c41d47c.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_acc2539d6a1b1dde157c062f1f549bee1199184a8c99e722a85320c5e4e9d8aeccb800a400cbdb0637861ecef603ec71950310fb7a2a6a640c8a239f44b3f555.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_268c9bba6ba649318f0da28c37b09a9bbfa371210f9b6b52faa7fd8ae94abf6b3c3bfeb5df5705c93495ce1152ca58aeabc435d6c6c1bd959025165c3f50e086.js
  • Skip to main content
  • Skip to footer
  • Home
  • Featured
    • Advanced Python Topics
    • AWS Learning Roadmap
    • JWT Complete Guide
    • Git CheatSheet
  • Explore
    • Programming
    • Development
      • microservices
      • Front End
    • Database
    • DevOps
    • Productivity
    • Tutorial Series
      • C# LinQ Tutorials
      • PHP Tutorials
  • Dev Tools
    • JSON Formatter
    • Diff Checker
    • JWT Decoder
    • JWT Generator
    • Base64 Converter
    • Data Format Converter
    • QR Code Generator
    • Javascript Minifier
    • CSS Minifier
    • Text Analyzer
  • About
  • Contact
CodeSamplez.com

CodeSamplez.com

Programming And Development Resources

You are here: Home / Programming / Python Dunder Methods: A Comprehensive Guide

Python Dunder Methods: A Comprehensive Guide

Updated July 4, 2025 by Rana Ahsan Leave a Comment ⏰ 15 minutes

Python Dunder Methods

Python Dunder Methods are the backbone of Python’s object-oriented programming. They define how objects interact with built-in functions, operators, and Python’s core functionality. Think of them as the translators between your custom objects and Python’s built-in operations.These special methods are everywhere in Python, quietly working behind the scenes to make your code more intuitive and powerful. Whether you’re calling len() on a list or adding two numbers with +, dunder methods are making it happen.

What is a Dunder method?

Dunder methods are special methods in Python that start and end with double underscores, used to define how objects behave with operators and built-in functions.

The term “dunder” comes from “double underscore” – these methods start and end with two underscores, like __init__ or __str__. Guido van Rossum, Python’s creator, introduced this convention in the early days of Python to distinguish special methods from regular ones. This naming pattern signals to both Python and other developers that these methods have special significance.

Understanding dunder methods transforms you from someone who uses Python to someone who truly understands how Python works. They’re your ticket to creating objects that feel native to the language, seamlessly integrating with Python’s built-in functions and operators.

💡: Explore all advanced python topics.

Table of contents

  • Understanding Python Dunder Methods
  • Object Creation and Destruction
    • init : The Constructor
    • new : The True Constructor
    • del : The Destructor
  • Representation and Formatting
    • str vs repr : The Dynamic Duo
    • format : Custom Formatting Magic
  • Python Dunder Methods For Comparison and Equality
  • Arithmetic Operations
  • Attribute Access
    • Dynamic Attribute Handling
    • The Attribute Access Flow
  • Container Methods
  • Other Important Python Dunder Methods
    • call : Making Objects Callable
    • Context Management with enter and exit
    • hash : Enabling Hashable Objects
  • Best Practices and Common Mistakes
    • When to Implement Dunder Methods
    • The eq and hash Consistency Rule
    • Performance Considerations
    • Error Handling Best Practices
  • Conclusion
  • Python Dunder Method FAQs

Understanding Python Dunder Methods

Dunder methods integrate seamlessly with Python’s object model, acting as hooks that Python calls automatically when certain operations occur. When you write len(my_list), Python actually calls my_list.__len__() behind the scenes. This elegant design makes Python feel natural and intuitive.

The power of dunder methods lies in operator overloading and built-in function support. They allow your custom objects to work with Python’s operators (+, -, ==, etc.) and built-in functions (len(), str(), repr(), etc.) just like built-in types do.

Let’s examine how built-in types use dunder methods. When you call len("Hello"), Python invokes "Hello".__len__(). Similarly, "Hello" + "World" triggers "Hello".__add__("World"). Every built-in type in Python implements relevant dunder methods to support these operations.

Here’s a simple example showing dunder methods in action:

# Behind the scenes, Python translates these operations
my_string = "Python"
print(len(my_string))        # Calls my_string.__len__()
print(str(my_string))        # Calls my_string.__str__()
print(my_string + " rocks")  # Calls my_string.__add__(" rocks")Code language: PHP (php)

The categories of dunder methods roughly align with different aspects of object behavior: creation and destruction, representation, comparison, arithmetic operations, attribute access, and container emulation. Each category serves specific purposes in making your objects behave like first-class Python citizens.

Overview of Python Dunder Methods

Pro Tip: Don’t call dunder methods directly in your code. Use the built-in functions and operators instead. Write len(obj) rather than obj.__len__() – it’s more readable and allows Python to optimize the call.

Object Creation and Destruction

The lifecycle of every Python object begins with creation and eventually ends with destruction. Two fundamental dunder methods control this process: __init__ for initialization and __del__ for cleanup.

init: The Constructor

__init__ is probably the most familiar dunder method. It initializes new objects, setting up their initial state. Think of it as your object’s birth certificate – it defines what the object looks like when it first comes into existence.

class BankAccount:
    def __init__(self, account_holder, initial_balance=0):
        self.account_holder = account_holder
        self.balance = initial_balance
        print(f"Account created for {account_holder}")
    
    def __del__(self):
        print(f"Account for {self.account_holder} is being closed")

# Creating instances
account1 = BankAccount("Alice", 1000)
account2 = BankAccount("Bob")

# When objects go out of scope or program ends, __del__ is calledCode language: Python (python)

new: The True Constructor

While __init__ initializes objects, __new__ actually creates them. You rarely need to override __new__, but it’s useful for controlling object creation in singletons or immutable types.

class Singleton:
    _instance = None
    
    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance
    
    def __init__(self):
        if not hasattr(self, 'initialized'):
            self.initialized = True
            print("Singleton initialized")

del: The Destructor

__del__ handles cleanup when objects are destroyed. Use it sparingly – Python’s garbage collector usually handles memory management automatically. It’s most useful for closing files, network connections, or other resources.

The timing of __del__ calls is unpredictable, so don’t rely on it for critical cleanup. Use context managers (with statements) for reliable resource management instead.

Representation and Formatting

How your objects present themselves to the world matters. Three dunder methods control string representation: __str__ for human-readable output, __repr__ for developer-friendly debugging, and __format__ for custom formatting.

str vs repr: The Dynamic Duo

__str__ creates readable representations for end users, while __repr__ provides unambiguous representations for developers. A good rule of thumb: __str__ should be pretty, __repr__ should be precise.

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __str__(self):
        return f"Point at ({self.x}, {self.y})"
    
    def __repr__(self):
        return f"Point({self.x}, {self.y})"
    
    def __format__(self, format_spec):
        if format_spec == 'coords':
            return f"{self.x},{self.y}"
        return str(self)

# Usage examples
p = Point(3, 4)
print(str(p))          # Point at (3, 4)
print(repr(p))         # Point(3, 4)
print(f"{p:coords}")   # 3,4Code language: Python (python)

The __repr__ method should ideally return a string that, when passed to eval(), recreates the object. If that’s not possible, return something enclosed in angle brackets like <Point object at 0x...>.

Pro Tip 💡: If you only implement one representation method, choose __repr__. Python will use it for __str__ if __str__ isn’t defined, but not vice versa.

format: Custom Formatting Magic

__format__ enables your objects to work with f-strings and the format() function. It’s incredibly powerful for creating domain-specific formatting options.

class Currency:
    def __init__(self, amount, code="USD"):
        self.amount = amount
        self.code = code
    
    def __format__(self, format_spec):
        if format_spec == 'short':
            return f"{self.code}{self.amount:.2f}"
        elif format_spec == 'long':
            return f"{self.amount:.2f} {self.code}"
        return f"{self.amount:.2f}"

price = Currency(29.99)
print(f"{price:short}")  # USD29.99
print(f"{price:long}")   # 29.99 USDCode language: Python (python)

Python Dunder Methods For Comparison and Equality

Comparing objects is fundamental to programming. Python provides six comparison dunder methods that make your objects work seamlessly with comparison operators.

Dunder MethodOperatorDescription
__eq__==Equal to
__ne__!=Not equal to
__lt__<Less than
__le__<=Less than or equal
__gt__>Greater than
__ge__>=Greater than or equal
class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade
    
    def __eq__(self, other):
        if not isinstance(other, Student):
            return NotImplemented
        return self.grade == other.grade
    
    def __lt__(self, other):
        if not isinstance(other, Student):
            return NotImplemented
        return self.grade < other.grade
    
    def __le__(self, other):
        return self < other or self == other
    
    def __gt__(self, other):
        return not self <= other
    
    def __ge__(self, other):
        return not self < other
    
    def __ne__(self, other):
        result = self.__eq__(other)
        if result is NotImplemented:
            return result
        return not result

# Usage
alice = Student("Alice", 85)
bob = Student("Bob", 92)

print(alice < bob)   # True
print(alice == bob)  # False
print(alice >= bob)  # FalseCode language: Python (python)

Pro Tip 💡: Always return NotImplemented (not NotImplementedError) when comparing with incompatible types. This allows Python to try the reverse operation or raise an appropriate error.

Implementing comparison methods enables sorting and other comparison-based operations on your objects. Python’s functools.total_ordering decorator can generate missing comparison methods from __eq__ and at least one other ordering method.

Arithmetic Operations

Arithmetic dunder methods transform your objects into mathematical entities. They enable natural mathematical notation with your custom classes, making code more intuitive and readable.

The main arithmetic dunder methods include:

  • __add__ (+), __sub__ (-), __mul__ (*), __truediv__ (/)
  • __floordiv__ (//), __mod__ (%), __pow__ (**)
  • __and__ (&), __or__ (|), __xor__ (^)
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other):
        if isinstance(other, Vector):
            return Vector(self.x + other.x, self.y + other.y)
        return NotImplemented
    
    def __sub__(self, other):
        if isinstance(other, Vector):
            return Vector(self.x - other.x, self.y - other.y)
        return NotImplemented
    
    def __mul__(self, scalar):
        if isinstance(scalar, (int, float)):
            return Vector(self.x * scalar, self.y * scalar)
        return NotImplemented
    
    def __rmul__(self, scalar):
        return self.__mul__(scalar)
    
    def __str__(self):
        return f"Vector({self.x}, {self.y})"

# Mathematical operations feel natural
v1 = Vector(2, 3)
v2 = Vector(1, 4)
v3 = v1 + v2        # Vector(3, 7)
v4 = v1 * 2         # Vector(4, 6)
v5 = 3 * v1         # Vector(6, 9) - uses __rmul__Code language: Python (python)

The __rmul__ method handles reverse multiplication (when your object is on the right side of the operator). Python tries the regular method first, then falls back to the reverse method if needed.

Question for reflection: How might you implement division for vectors? Would you support element-wise division, or perhaps division by a scalar only?

Attribute Access

Controlling how attributes are accessed, set, and deleted gives you powerful ways to create dynamic, flexible objects. Four key dunder methods manage attribute access in Python.

flowchart illustrating Python's attribute access sequence with the __getattr__ fallback mechanism

Dynamic Attribute Handling

__getattr__ is called when Python can’t find an attribute through normal lookup. It’s perfect for creating proxy objects or implementing attribute forwarding.

class DynamicObject:
    def __init__(self):
        self._data = {}
    
    def __getattr__(self, name):
        if name in self._data:
            return self._data[name]
        raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'")
    
    def __setattr__(self, name, value):
        if name.startswith('_'):
            # Allow private attributes to be set normally
            super().__setattr__(name, value)
        else:
            # Store public attributes in our data dictionary
            if not hasattr(self, '_data'):
                super().__setattr__('_data', {})
            self._data[name] = value
    
    def __delattr__(self, name):
        if name in self._data:
            del self._data[name]
        else:
            raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'")

# Usage
obj = DynamicObject()
obj.name = "Python"      # Stored in _data
obj.version = 3.9        # Stored in _data
print(obj.name)          # Retrieved from _data
del obj.version          # Removed from _dataCode language: Python (python)

The Attribute Access Flow

Understanding the order of attribute access helps you implement these methods correctly:

  1. __getattribute__ is called for every attribute access
  2. If __getattribute__ raises AttributeError, __getattr__ is called
  3. Setting attributes calls __setattr__
  4. Deleting attributes calls __delattr__

Pro Tip: Be extremely careful with __getattribute__ – it’s called for every attribute access and can easily cause infinite recursion. Use super().__getattribute__() to access attributes safely within it.

Important ⚠️: Be mindful about mixing up the attribute access behaviour with python descriptors, which are for class-level attribute management, where these are at the instance-level.

Container Methods

Container dunder methods make your objects behave like built-in containers (lists, dictionaries, sets). They enable natural syntax for accessing, modifying, and iterating over your custom collections.

Essential container methods include:

  • __len__: Returns container length for len() function
  • __getitem__, __setitem__, __delitem__: Enable indexing with []
  • __iter__: Makes objects iterable in for loops
  • __contains__: Enables in operator
class SimpleList:
    def __init__(self):
        self._items = []
    
    def __len__(self):
        return len(self._items)
    
    def __getitem__(self, index):
        return self._items[index]
    
    def __setitem__(self, index, value):
        self._items[index] = value
    
    def __delitem__(self, index):
        del self._items[index]
    
    def __iter__(self):
        return iter(self._items)
    
    def __contains__(self, item):
        return item in self._items
    
    def append(self, item):
        self._items.append(item)
    
    def __str__(self):
        return f"SimpleList({self._items})"

# Behaves like a built-in list
my_list = SimpleList()
my_list.append("Python")
my_list.append("JavaScript")

print(len(my_list))           # 2
print(my_list[0])             # Python
print("Python" in my_list)    # True

for item in my_list:          # Iteration works
    print(item)Code language: Python (python)

This implementation creates a list-like container that supports all the operations you’d expect. The __iter__ method makes it work with for loops, list comprehensions, and other iteration contexts.

Other Important Python Dunder Methods

Several other dunder methods provide specialized functionality that can make your objects incredibly powerful and flexible.

call: Making Objects Callable

__call__ transforms objects into function-like entities. When you add parentheses after an object, Python calls its __call__ method.

class Multiplier:
    def __init__(self, factor):
        self.factor = factor
    
    def __call__(self, value):
        return value * self.factor

# Create callable objects
double = Multiplier(2)
triple = Multiplier(3)

print(double(5))    # 10 (calls double.__call__(5))
print(triple(4))    # 12 (calls triple.__call__(4))

# Use in higher-order functions
numbers = [1, 2, 3, 4, 5]
doubled = list(map(double, numbers))  # [2, 4, 6, 8, 10]Code language: Python (python)

Context Management with enter and exit

Context managers enable the with statement, providing automatic resource management and cleanup.

class FileManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
        self.file = None
    
    def __enter__(self):
        print(f"Opening {self.filename}")
        self.file = open(self.filename, self.mode)
        return self.file
    
    def __exit__(self, exc_type, exc_value, traceback):
        print(f"Closing {self.filename}")
        if self.file:
            self.file.close()
        <em># Return False to propagate exceptions</em>
        return False

# Usage with 'with' statement
# with FileManager("data.txt", "w") as f:
#     f.write("Hello, World!")
# File automatically closed when leaving the with blockCode language: Python (python)

Tip 💡: Learn about python context managers more in depth.

hash: Enabling Hashable Objects

__hash__ makes objects usable as dictionary keys and set members. Objects that compare equal must have the same hash value.

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __eq__(self, other):
        if not isinstance(other, Point):
            return NotImplemented
        return self.x == other.x and self.y == other.y
    
    def __hash__(self):
        return hash((self.x, self.y))
    
    def __str__(self):
        return f"Point({self.x}, {self.y})"

# Now points can be dictionary keys or set members
points = {Point(1, 2): "First", Point(3, 4): "Second"}
unique_points = {Point(1, 2), Point(1, 2), Point(3, 4)}  # Set with 2 unique pointsCode language: Python (python)

Best Practices and Common Mistakes

Implementing dunder methods effectively requires understanding when and how to use them properly. Here are key guidelines I’ve learned through experience and seeing common pitfalls.

When to Implement Dunder Methods

Implement dunder methods when they make your objects more intuitive and Pythonic. If your class represents something that naturally supports certain operations, add the corresponding dunder methods. A Vector class should support addition, a BankAccount might support comparison based on balance, and a custom collection should support len() and iteration.

Don’t implement dunder methods just because you can. Each method should serve a clear purpose and feel natural to users of your class. Overloading operators in unexpected ways confuses rather than helps.

The eq and hash Consistency Rule

This is the most common mistake I see: implementing __eq__ without considering __hash__. If two objects compare equal, they must have the same hash value. If you override __eq__, you usually need to override __hash__ too, or set __hash__ = None to make objects unhashable.

# Problematic - can break when used in sets or as dict keys
class BadExample:
    def __init__(self, value):
        self.value = value
    
    def __eq__(self, other):
        return isinstance(other, BadExample) and self.value == other.value
    # Missing __hash__ override!

# Correct implementation
class GoodExample:
    def __init__(self, value):
        self.value = value
    
    def __eq__(self, other):
        return isinstance(other, BadExample) and self.value == other.value
    
    def __hash__(self):
        return hash(self.value)Code language: Python (python)

Performance Considerations

Dunder methods are called frequently, so their performance matters. Keep implementations simple and fast. Avoid complex calculations in methods like __hash__ or __eq__ that might be called repeatedly.

For container classes, consider caching length calculations if computing length is expensive. Store the result and update it when the container changes rather than recalculating every time __len__ is called.

Error Handling Best Practices

Return NotImplemented (not NotImplementedError) when operations aren’t supported between types. This allows Python to try alternative approaches or provide appropriate error messages.

def __add__(self, other):
    if isinstance(other, MyClass):
        # Perform addition
        return MyClass(self.value + other.value)
    return NotImplemented  # Let Python handle the errorCode language: Python (python)

Always validate inputs in dunder methods. Users will try unexpected operations, and clear error messages save debugging time.

Conclusion

Mastering Python Dunder Methods transforms your understanding of Python from surface-level syntax to deep comprehension of how the language works. These special methods are the bridge between your custom objects and Python’s built-in functionality, enabling you to create classes that feel native to the language.

The journey from basic classes to dunder-method-powered objects is transformative. Your code becomes more intuitive, your objects integrate seamlessly with Python’s ecosystem, and you gain the ability to create truly Pythonic APIs. Start with the basics – __init__, __str__, and __repr__ – then gradually add other methods as your needs grow.

Remember that dunder methods should enhance clarity, not obscure it. Every method you implement should make your objects more natural to use. When in doubt, ask yourself: “Would this operation feel obvious to someone using my class?”

Keep experimenting, keep building, and most importantly, keep the Python zen in mind: “There should be one obvious way to do it.” 🐍

For more deeper exploration, check out the official Python documentation on special methods and explore Python’s data model guide.


Python Dunder Method FAQs

What is the difference between str and repr?

__str__ provides a readable string for users, while __repr__ offers a detailed representation for developers, often for debugging. Use __str__ for end-user display and __repr__ for development and logging.

Can I create my own dunder methods?

It’s not recommended, as double-underscore names are reserved for Python’s special methods. Create regular methods with descriptive names instead.

Do I need to implement all comparison methods?

No, you can use functools.total_ordering decorator with just __eq__ and one ordering method (like __lt__), and Python will generate the rest.

What’s the difference between getattr and getattribute?

__getattribute__ is called for every attribute access, while __getattr__ is only called when normal attribute lookup fails. Use __getattr__ for dynamic attributes and be very careful with __getattribute__.

Share if liked!

  • Click to share on Facebook (Opens in new window) Facebook
  • Click to share on X (Opens in new window) X
  • Click to share on LinkedIn (Opens in new window) LinkedIn
  • Click to share on Pinterest (Opens in new window) Pinterest
  • Click to share on Reddit (Opens in new window) Reddit
  • Click to share on Tumblr (Opens in new window) Tumblr
  • Click to share on Pocket (Opens in new window) Pocket

You may also like


Discover more from CodeSamplez.com

Subscribe to get the latest posts sent to your email.

First Published On: July 4, 2025 Filed Under: Programming Tagged With: python

About Rana Ahsan

Rana Ahsan is a seasoned software engineer and technology leader specialized in distributed systems and software architecture. With a Master’s in Software Engineering from Concordia University, his experience spans leading scalable architecture at Coursera and TopHat, contributing to open-source projects. This blog, CodeSamplez.com, showcases his passion for sharing practical insights on programming and distributed systems concepts and help educate others.
Github | X | LinkedIn

Reader Interactions

Leave a ReplyCancel reply

Footer

Subscribe via Email

Follow Us

  • Facebook
  • X
  • Pinterest
  • Tumblr

Other Sites

  • Demo.CodeSamplez.com

Explore By Topics

Python | AWS | PHP | C# | Javascript

Copyright © 2025

https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_86657cead856f68ee7261db060b54a5ce27ae200a766419272c90aac0165e01f6cb3d156c9720e72f0117622264cfe55143e6a09e330bddd3326ebf81e8e4fb9.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_c402e38f1879c18090377fb6b73b15ac158be453ecda3a54456494fe8aba42b990c293bae5424e5643d52515ffc2067e0819995be8d07d5bba9107a96780775c.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_ffc3511227531cc335353c54c3cbbaa11d0b80e5cb117478e144436c13cd05495b67af2e8950480ed54dbdabcdcef497c90fdb9814e88fe5978e1d56ce09f2cf.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_d57da9abfef16337e5bc44c4fc6488de258896ce8a4d42e1b53467f701a60ad499eb48d8ae790779e6b4b29bd016713138cd7ba352bce5724e2d3fe05d638b27.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_edc0e9ef106cc9ef7edd8033c5c6fcff6dc09ee901fd07f4b90a16d9345b35a06534f639e018a64baaf9384eee1df305570c1ecad747f41b787b89f53839962b.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_5a3aa28cd4eb24db3e3e2acd58230ff5cdc78120b94c2b118227d4c7806ecac03978e1a10404240314f66a3b82af8823768abb8b9eccc5003d198eb077ea12b8.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_dccc492dbbfdac33d1411f9df909e849c7268fcf99b43007f278cde3a0adc0ae00e8cae5ec81cf255b9a6eae74e239ba1fa935572af77173219cb081f7d2327d.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_00bacf9e36181aac2b666d110cd9d82257f846766e7041b2d7b3c909b458982931ccc9b203e37098fbdfcf43ca359cf04e3824a724a6789fc204196d3a72ad29.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_a7a1f50fbaa51a32a3fdcacece70794f7ce90d313e437dd0cb69784b07f922aa6f7e3d8a5c1b594b29ccd10842b54d1877e5d5a6e35011a2c6d6e1b887010ca0.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_aa5a5d229b421633f4247380e1e8c0a4854f82efb35d13a5b07b7b8fbe22e98842a580f063e5965345a51c477a7f5c2585edf8dd7d896b2438dc61f91d8d970c.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_bb8058a9e234a7ffaa98891b1df7f6b8e67410e6984568b151daa05113b8c7f89d7b5918ae73f020998a16f7f5a087a13d6a9a5e5d7c301e2ca12fd9d1f8d177.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_647fb67570c6108fb10ae6785a1abdbecac99ffcf80351d0bef17c3cf783dce497b1895fcdaae997dacc72c359fbfb128cc1540dd7df56deb4961e1cd4b22636.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f7a298a0f1f754623fe3b30f6910ce2c1373f715450750bd7a391571812b00df1917e2be90df6c4efc54dbdfda8616278a574dea02ba2c7a31992768df8db334.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_df30604d5842ef29888c3c1881220dc6d3f8854666d94f0680c5f38aa643c5fb79b10eb9f10998d8856eb24ca265783195937434fd6c2bb8e4846df0277a7fb7.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f17fe6fb0993f1703181d7ae9e9ea570f3d33a43afd6f2a4567daa1a6745698c7b8193dc72d50991d2dd87cd3dcf663959206607d193a9b57926d061a1f50aef.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_945dcbab2c2a131f3c90f4fb91776b76066d589f84fb55bff25cd5d79a56218000616bfca1f0af9a74f32348693707af49e8fe624de8aa34f1e1c5b6a25709cf.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_65820d252e1b93596de6697fd5f02483f3e2524a0696c7d698b64745edb32bf5831a90e556842f5f88c8209766cc78ca3a41cf783d20236a9f90d4a7ea7b3e72.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_7286884797a1210857e2a36f8ab46604b0034b6abf512380447a5763c873db6a72b8547f660053de0ea69faef1eb64878f39ff4b0ea86c963efab95764a3bf5b.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_cbcf6c279ac6c6a25ae138bf964e64a5fd90d22dcdf8a53b6fe7b72cefa51063bfb0181a6e50dd2acdcae2795619887d1d83b10461e44e5103be756f2588d837.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_47965bc586b95810c925b9df3314e0c9a5cd121e70ca0831f87df0bc034695de4f83ecf2def86f737e14614ee138794473cf32cd3082a5d38db9dec0c1f266fa.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_12aa201cea075846d266536aa222d64d4088b851d87f55dac5e611b77add6826c8ebc6e82650fcd1a9e88a05a0072dedd195719c5f64cd4580a0acd8aee05d92.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_7859317dea28a85c983d7b2a933704b193600b52929d2d894deae21a5d78f1f9715214d4c2ed1b925e9183146806725621d586779705dea3b651260eb53a2f8a.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_afddf63208dd746f1ab00460d07724a2aba9a6b6f90f536bf99b6bc1796c2284834464236dcc309ef4b9b74f755bed252c8fa9c115f434c98332da452af282ec.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_d87ea86dd0e7ecdd5fe7a5bb67becf943e57c3add866b456034d51663d099031bd563e12f61fdccc044969adf938a8584ed22ccd401ab8b669e20e4f92fb54e8.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_35311c3d71a3605fad4e1d6b50f3911311cdcc46418bdf56d6d0308a75a69585269ee7582a335e29989adf308fa1a81a10a2c2d4e257e9d680447a4996f6269e.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f4fc182ef03c12e9dcadd6febc3dbaa4a29134469057ca9e8ec0be2f2de29a494514ff4b59798e74debf26f78b2df2b3e2665c69b77035761fb463b783202915.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_85c0f2769456e60153b0fd8364b82a035da53384f62de342d9bdca806f3f1ea56486919a00497a18d457949c82bf8bfacc4423fc332074ddf71a49a8fe628fff.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_67f99bef3678c549a14b5f2ff790cce6aba338dca29020755444231b45fa0f980f795e3658496ba70739a099b47b22bc2eab564343ac6132309de3adbbae3455.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_09eecfdd96206ed13830b4b93cfb2cc75cd38083671a34194437b5734b5bb38712209dc335b07e3266ceb3c3a44a155b9bbe5f3e0e1105b19dd45d3def76f020.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_4c089fbdb88e3b624a6f884d3ba1bf606f003bfcd3742376d0d353cd62181dc663aa3811a56361c3100de488fc4d6595a50de2b26f058921ba74f5f2c1b5be00.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_897ff6ac314c5f5e0f496c6af624bd9abf296a02cb5aeb850b9220b6dc3ce2fc4004cb02ed8b59d59d4b9c9d90f050d6eebc1d08ecaebab2f671f7d9367e6410.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_67d1e619e71d36ae00ddcf85ee18628bb4eb64fcb3d6119b463e75cb987013420a21136d19cd03e6634ccc01cfa9af4a357930e4cf6900953b7812efb4f249fb.js