このトピックについて同様の質問がいくつか見られますが、確認したいので、質問しています...
違いは何ですか:
class MyClass:
pass
と
class MyClass():
pass
また、これら2つの違いはありますか:
class MyClass():
pass
class MyClass(object):
pass
class MyClass
と の間に違いはありませんclass MyClass()
。2 番目の質問は、Python のバージョンによって異なります。python3.x では、違いはありません。python2.x では、後者 (から継承する場所) は、古いスタイルのクラスではなく、新しいスタイルのクラスobject
を作成します。python3.x では、すべてのクラスが新しいスタイルです。最近は新しいスタイルのクラスが好まれています。そのため、クラスがオブジェクトから継承されていることを常に確認しています。
最初の 2 つのスペルに違いはありません。
Python 2.7 では、後者の 2 つに大きな違いがあります。から継承object
すると新しいスタイルのクラスになり、継承のセマンティクスが変更され、記述子 ( 、 など) のサポートが追加され@property
ます@classmethod
。これは Python 3 のデフォルトです。
Python 2.2 で新しいスタイルのクラスが導入され、型 ( や など) とクラスが統一されましint
たlist
。いくつかの変更は後方互換性のない方法で行われるため、変更を有効にするには、明示的に継承する「オプトイン」する必要がありobject
ます。
Python 3 では、からの継承object
は不要になりました。クラスは常に新しいスタイルです。
class MyClass(object)
型のクラス宣言は、Python 2.xの New Style クラスです。
Guido は、Python の歴史で新しいクラスをもたらした考え方について書いています。