【发布时间】:2019-11-24 09:41:42
【问题描述】:
在许多语言中,我们使用new 来实例化一个类的新实例。例如,在 Java 中:
class MyClass {
int number = 1;
MyClass(int n) {
self.number = n;
}
}
MyClass obj1 = new MyClass(5);
但是,随着我越来越多地使用 Python,我开始想知道为什么 new 关键字甚至是必要的。在 Python 中,我们可以简单地这样做:
class MyClass:
def __init__(self, n):
self.n = n
obj1 = MyClass(5)
那么,关键字的用途是什么?是否存在一些我们通过使用关键字来解决的语法歧义?
【问题讨论】:
-
因为这就是语言的设计方式。因为 Java 是基于 C++ 的,而 C++ 就是这样设计的。
-
@Andreas 我同意 Java 可能拥有它,因为它基于 C++ 拥有它,但是问题变成了“为什么 C++ 拥有它?”
-
您可以就每种语言中的每个语法设计决策提出这个问题。为什么 Python 中没有大括号?为什么分号在 Python/JavaScript 中是可选的?大多数时候,答案将是“只是因为”。其他时候会是“因为 X 语言想要简化 Y 语言的语法”。
-
@DeepSpace 你可以很容易地反驳相反的观点,为什么 Java 和 C++ 在调用函数之前没有使用
call关键字?通常答案是“因为没有必要,所以为什么要让用户做不必要的工作?”似乎语言语法的基本原理通常遵循一些推理。 -
@GrumpyCrouton Java 的“只是因为”
new被使用只是因为 在 C++ 中被使用。问题是关于“为什么在 Java 中?”,所以答案是:只是因为。关于Java的问题,C++有它的原因并不重要。