Python - 打印创建对象时调用了哪些 dunder 方法

Python - Print which dunder methods were called when creating an object

我遇到了下面的代码,它看起来很简单,但对我来说有点黑魔法:

class FileItem(dict):
    def __init__(self, name):
        dict.__init__(self, name=name)

x = FileItem("test")
print(x)

{'name': 'test'}

当我这样做时似乎发生了同样的事情:

print(dict.__call__(name="test"))

{'name': 'test'}

我想第二个例子至少也要调用__init___方法吧? 有没有办法打印用于创建对象的所有 dunder 方法?

据我目前的理解,它似乎是:

  1. __new__
  2. __init__
    可选:__call__

任何人都可以帮助我如何实际看到这个吗?

__call__ 只是对象创建的间接部分。你的例子并没有完全按照你的想法去做——它没有调用 dict.__call__。仅当您执行 x() 时才会调用,其中 xdict 实例。

dict 恰好是一个对象本身,类型为 classclass 类型有一个 __call__ 方法,它允许你写 x = dict()class.__call__ 方法触发对象创建。

对象创建涉及 __new____init__