我怀疑在python类中传递的参数是__init__
方法。人们会说这是类实例在这里作为__init__
方法中的第一个参数传递。
Class A():
def __init__(self):
pass
def check(self):
pass
a = A()
a.check()
我们知道这里' a'正如方法__init__
中的第一个参数一样传递。但是在这里我们刚刚创建了A类的实例。对于其他方法检查,当我们执行a.check()
时,将理解OK,这里我们正在调用类的实例检查,因此它正在被传递。但对于__init__
方法,我们没有做任何事情,只是创建了实例。那么它是如何被传递的。
举个例子,
a = a + 10 ......除非我们将初始化此表达式的开头,否则这将无法工作。和__init__
一样。
我们刚刚在这里创建了a = A()的实例。然后将通过这里。
我知道我的问题有点棘手。但是在接受采访时我已经问过了。
请有人帮忙吗?
答案 0 :(得分:6)
不会传递a
,传递类实例。实例在分配给a
之前存在。它独立于a
存在。举个例子:
[A() for _ in range(5)]
将创建5个A
个实例,即使它们没有直接分配给任何变量(列表表达式可能已分配,但每个A()
不是)。
实例化类时,该类的__new__
创建新实例,然后在其上调用__init__
,然后返回新实例并(在您的情况下)分配给a
(有关详细信息,请参阅https://stackoverflow.com/a/43187010/476)。
答案 1 :(得分:5)
此示例中的步骤顺序(假设标准元类type
)为
A()
是使用type.__call__(A)
实现的。type.__call__(A)
来电A.__new__
。A.__new__
解析为object.__new__
,后者返回A
的新实例。type.__call__(A)
将object.__new__
的返回值传递给A.__init__
(其中self
是第一个参数用于__init__
的名称)。type.__call__(A)
然后返回(初始化的)对象,该对象绑定到名称a
。