有用性はドキュメントです。オブジェクトの作成とメソッドの呼び出しを区別するのは、Python よりも簡単です。
その理由は歴史的なものであり、C++ 構文に直接由来しています。C++ では、「Class1()」はスタック上にClass1 インスタンスを作成する式です。例: vector a = vector(); この場合、ベクトルが作成され、ベクトル a にコピーされます (場合によっては、オプティマイザが冗長なコピーを削除できます)。
代わりに、"new Class1()" は、Java や C# のようにヒープ上にClass1 インスタンスを作成し、Java や C++ とは異なり、異なるアクセス構文でそのポインターを返します。実際には、取得したオブジェクトを参照によって返すことができるように、何らかのヒープを参照する必要がある特殊な目的のアロケーターを使用するように new の意味を再定義できます。
さらに、Java/C#/C++ では、Class1() 自体が任意のメソッド/関数を参照する可能性があり、混乱を招く可能性があります。Javaコーディング規約では、クラス名は大文字で始まり、メソッド名は小文字で始まる必要があるため、実際にはそれを回避します.おそらくそれが、この場合のPythonの混乱を避ける方法です. リーダーは、"Class1()" がオブジェクトを作成し、"class1()" が関数呼び出しであり、"x.class1()" がメソッド呼び出しであると想定します ("x" は "self" の場合もあります)。
最後に、Python ではクラスをオブジェクト、特に呼び出し可能なオブジェクトにすることを選択したため、'new' のない構文は許可され、別の構文も許可することは矛盾します。