【问题标题】:Correlation between constructors in Java and __init__ function in PythonJava 中的构造函数与 Python 中的 __init__ 函数之间的相关性
【发布时间】:2014-06-13 00:48:56
【问题描述】:

我目前正在学习更多关于 Java 中的构造函数,我发现就像 Python 中的 __init__ 函数一样,构造函数是在我们实例化一个类的对象时立即调用的函数。

那么,这两个概念在抽象上是同一个吗?

【问题讨论】:

  • 在您编写代码时,它们可能有相似的用法,但 Java 和 Python 本质上是两种不同的语言在概念上,所以除了这种相似性之外,其他一切都很好很不一样。建议您专注于 Java 和 Python 之间的这些概念差异,而不是语义差异,例如构造函数声明等。

标签: java python oop constructor


【解决方案1】:

__init__ 用于初始化。 __new__ 经常被优先使用。

【讨论】:

  • 我可能会说__new__偶尔使用的。
【解决方案2】:

这些是非常相似的东西,但至少有一个很大的不同。

  • constructor 被调用 before/当对象被构造时
  • __init__ 对象被构造之后被调用,所以你有一个对它的有效引用(称为self

【讨论】:

  • Java 是否也不允许使用它的“this”关键字来引用对象,就像 Python 对“self”所做的那样?
  • -1 调用 Java 构造函数,并使用已分配且稍微初始化的对象为 this。同样,调用 Python __init__ 函数时,使用已分配且稍微初始化的对象为 self。 @ManasChaturvedi 你是对的,确实如此。
  • selfthis 略有不同。 this 是一个始终可用的关键字,无论方法的签名如何,并且只需要区分实例变量和同名的本地/类变量。 self(或程序员选择的任何名称)是方法的第一个参数,Python 在运行时使用对调用对象的引用填充该方法,并且必须用于访问实例变量。
  • @chepner 语法结构有不同的含义,但在这两种情况下,它都是对已经部分分配的实例的引用,现在正在通过构造函数/__init__ 初始化。请注意,如果this 在对象创建之前 可用,则会出现严重的内存安全错误:您可以访问未初始化或未分配的内存。