所以我知道实例对象有绑定方法,但你也可以通过访问类调用该函数,因为函数可以是所述类的属性。
我的问题是,当没有创建自我时,python如何自动将自身传递到__init__
方法?是否有一些我不熟悉的幕后流程?它看起来像鸡蛋之前的鸡蛋。
我知道其他函数调用确实需要你传递实例化对象,但init对我来说似乎很神秘。
答案 0 :(得分:1)
我的问题是,当没有创建自我时,python如何自动将自身传递到 init 方法?是否有一些我不熟悉的幕后流程?它看起来像鸡蛋之前的鸡肉。
是的,你是对的。 创建类实例后,__init__
称为。 __init__
不会创建一个类实例,它只允许一个人定制' 该实例。 __new__
是实际用于创建新类实例的方法。它接受对类对象的引用,以及传递给所述类对象的任何参数。
以下是__init__
和__new__
方法的文档:
__init__
在创建实例(由
__new__()
)之后调用,但在将其返回给调用者之前调用。参数是传递给类构造函数表达式的参数。如果基类具有__init__()
方法,则派生类的__init__()
方法(如果有)必须显式调用它以确保实例的基类部分的正确初始化;例如:super().__init__([args...])
。由于
__new__()
和__init__()
在构造对象(__new__()
以创建对象,以及__init__()
自定义对象)中协同工作,因此不能返回非None值__init__()
;这样做会导致在运行时引发TypeError。
__new__
被调用以创建类 cls 的新实例。
__new__()
是一个静态方法(特殊的,因此您不需要声明它),它将请求实例的类作为其第一个参数。其余参数是传递给对象构造函数表达式的参数(对类的调用)。__new__()
的返回值应该是新的对象实例(通常是 cls 的实例)。典型的实现通过使用带有适当参数的
__new__()
调用超类的super().__new__(cls[, ...])
方法创建类的新实例,然后在返回之前根据需要修改新创建的实例。如果
__new__()
返回 cls 的实例,那么将调用新实例的__init__()
方法,如__init__(self[, ...])
,其中self是新实例,而其余参数与传递给__new__()
的参数相同。如果
__new__()
未返回 cls 的实例,则不会调用新实例的__init__()
方法。