Dunder or magic methods in Python
Dunder or magic methods in Python are the methods having two prefix and suffix underscores in the method name. Dunder here means “Double Under (Underscores)”. These are commonly used for operator overloading. Few examples for magic methods are: __init__, __add__, __len__, __repr__
etc.
The __init__
method for initialization is invoked without any call, when an instance of a class is created, like constructors in certain other programming languages such as C++, Java, C#, PHP etc. These methods are the reason we can add two strings with ‘+’ operator without any explicit typecasting.
Here’s a simple implementation :
# declare our own string class class String: # magic method to initiate object def __init__( self , string): self .string = string # Driver Code if __name__ = = '__main__' : # object creation string1 = String( 'Hello' ) # print object location print (string1) |
Output :
<__main__.String object at 0x7fe992215390>
The above snippet of code prints only the memory address of the string object. Let’s add a __repr__
method to represent our object.
# declare our own string class class String: # magic method to initiate object def __init__( self , string): self .string = string # print our string object def __repr__( self ): return 'Object: {}' . format ( self .string) # Driver Code if __name__ = = '__main__' : # object creation string1 = String( 'Hello' ) # print object location print (string1) |
Output :
Object: Hello
If we try to add a string to it :
# declare our own string class class String: # magic method to initiate object def __init__( self , string): self .string = string # print our string object def __repr__( self ): return 'Object: {}' . format ( self .string) # Driver Code if __name__ = = '__main__' : # object creation string1 = String( 'Hello' ) # concatenate String object and a string print (string1 + ' world' ) |
Output :
TypeError: unsupported operand type(s) for +: 'String' and 'str'
Now add __add__
method to String class :
# declare our own string class class String: # magic method to initiate object def __init__( self , string): self .string = string # print our string object def __repr__( self ): return 'Object: {}' . format ( self .string) def __add__( self , other): return self .string + other # Driver Code if __name__ = = '__main__' : # object creation string1 = String( 'Hello' ) # concatenate String object and a string print (string1 + ' Geeks' ) |
Output :
Hello Geeks
Reference : docs.python.org.
Recommended Posts:
- Python | Implementing 3D Vectors using dunder methods
- List Methods in Python | Set 1 (in, not in, len(), min(), max()...)
- Private Methods in Python
- List methods in Python
- Dictionary Methods in Python | Set 1 (cmp(), len(), items()...)
- Accessing Attributes and Methods in Python
- Python | Float type and its methods
- Python Input Methods for Competitive Programming
- Analysis of Different Methods to find Prime Number in Python
- Dictionary Methods in Python | Set 2 (update(), has_key(), fromkeys()...)
- List Methods in Python | Set 2 (del, remove(), sort(), insert(), pop(), extend()...)
- Python String Methods | Set 3 (strip, lstrip, rstrip, min, max, maketrans, translate, replace & expandtabs())
- Python String Methods | Set 2 (len, count, center, ljust, rjust, isalpha, isalnum, isspace & join)
- Python String Methods | Set 1 (find, rfind, startwith, endwith, islower, isupper, lower, upper, swapcase & title)
- Difference between map, applymap and apply methods in Pandas
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.