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 方法?
据我目前的理解,它似乎是:
__new__
__init__
可选:__call__
任何人都可以帮助我如何实际看到这个吗?
__call__
只是对象创建的间接部分。你的例子并没有完全按照你的想法去做——它没有调用 dict.__call__
。仅当您执行 x()
时才会调用,其中 x
是 dict
实例。
dict
恰好是一个对象本身,类型为 class
。 class
类型有一个 __call__
方法,它允许你写 x = dict()
。 class.__call__
方法触发对象创建。
对象创建涉及 __new__
和 __init__
。
我遇到了下面的代码,它看起来很简单,但对我来说有点黑魔法:
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 方法?
据我目前的理解,它似乎是:
__new__
__init__
可选:__call__
任何人都可以帮助我如何实际看到这个吗?
__call__
只是对象创建的间接部分。你的例子并没有完全按照你的想法去做——它没有调用 dict.__call__
。仅当您执行 x()
时才会调用,其中 x
是 dict
实例。
dict
恰好是一个对象本身,类型为 class
。 class
类型有一个 __call__
方法,它允许你写 x = dict()
。 class.__call__
方法触发对象创建。
对象创建涉及 __new__
和 __init__
。