python中的constructer和initializer有什么区别?

She*_*don 13 python constructor initialization class object

可能重复:
Python(和Python C API):newinit

我刚刚上大学,讲师正在互换使用术语构造函数和初始化器.我很确定这是错的.

我试过谷歌搜索答案,但没有找到我正在寻找的答案.

Dae*_*yth 20

在大多数OO语言中,它们是相同的步骤,所以他对java,c ++等等没有错.在python中,它们分两步完成:__new__构造函数; __init__是初始化器.

是另一个答案,更详细地介绍了它们之间的差异.


小智 5

在几乎所有通常的情况下,Python没有其他OO语言使用的相同意义上的构造函数,因为通常不鼓励手动管理内存.相反,您通常应该在类上定义__ init __方法.调用此方法以自动初始化新实例对象,首先构造它.因此,它不是一个真正的构造函数,并且将它作为构造函数来谈论可能会让一些人感到困惑.

当然有些人想把它称为构造函数,因为它有点像构造函数 - 从根本上你可以随意调用它,只要每个人都理解你实际指的是什么.但总的来说,要明确并让自己理解,可以将其称为init方法或构造函数以外的其他方法.从根本上说,不同的语言只是有一些不同的术语,说得非常清楚,总是需要调整你的主题和观众.

在Python中,可以以更精细的粒度管理实例创建和销毁,但除非您知道自己在做什么,否则不希望这样做.这是通过定义__ new ____ del __方法来挂钩对象实例化和del语句来完成的.这些是否有资格作为构造函数和析构函数确切地说是有争议的(Python文档将del方法称为析构函数,但在构造函数的构成上往往更加模糊,例如包含许多返回对象实例的函数).我仍然鼓励您使用手头语言的特定术语,并在比较讨论中预先定义您的术语.与往常一样,您在演讲时选择的术语涉及能够轻松跟随您的观众与可能引起混淆的观众之间的权衡:如果您谈论的内存管理可能尽可能具体,但如果您正在松散地谈话那么只需使用您的观众理解的一些词语,并准备好澄清.

你的导师在最坏的情况下不清楚,我不知道这些术语的任何一个规范定义,但它们可能会导致那些从其他语言中学到非常具体定义的人的混淆.