python中的构造函数和初始化程序有什么区别?

时间:2011-05-25 20:40:13

标签: python class object constructor initialization

  

可能重复:
  Python (and Python C API): new versus init

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

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

3 个答案:

答案 0 :(得分:20)

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

Here是另一个答案,详细介绍了它们之间的差异。

答案 1 :(得分:5)

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

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

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

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

答案 2 :(得分:0)

http://docs.python.org/reference/datamodel.html#basic-customization

__new__ - 构造函数。

__init__ - 初始化程序。