'Python - Print which dunder methods were called when creating an object
I came across the following code, which looks easy but was a little bit of black magic for me:
class FileItem(dict):
def __init__(self, name):
dict.__init__(self, name=name)
x = FileItem("test")
print(x)
{'name': 'test'}
The same seems to be happening when I do this:
print(dict.__call__(name="test"))
{'name': 'test'}
I think there also has to be at least the __init___ method be called in the second example, right? Is there a way to print all dunder methods used to create an Object?
From my understanding right now it seems it is:
__new____init__
Optional:__call__
Can anyone help me how to actually see this in action?
Solution 1:[1]
__call__ is only indirectly part of object creation. Your example doesn't do exactly what you think it does -- it does not call dict.__call__. That would only be called if you did x() where x is a dict instance.
dict happens to be an object itself, of type class. The class type has a __call__ method, which allows you to write x = dict(). The class.__call__ method triggers object creation.
Object creation involves __new__ and __init__.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
