Py学习  »  Python

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

Data Mastery • 3 年前 • 1280 次点击  

我遇到了下面的代码,看起来很简单,但对我来说有点不可思议:

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__

有人能帮我如何真正看到这一点吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130711
 
1280 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Tim Roberts
Reply   •   1 楼
Tim Roberts    3 年前

__call__ 只是对象创建的间接部分。你的例子并不像你想象的那样——它没有调用 dict.__call__ .只有你这么做了才会打电话 x() 哪里 x 是一个 dict 例子

字典 恰好是一个对象本身,类型 class 这个 类型有一个 __打电话__ 方法,它允许您编写 x = dict() 这个 class.__call__ 方法触发对象创建。

对象创建包括 __new__ __init__ .