例1:
class Person(object):
pass
例2:
class Person:
pass
オブジェクト宣言は何をしますか?あなたはそれを使うべきですか?私は両方のプログラムをたくさん持っていますが、それがどのような違いを生み出しているのかわかりません。誰かがこの概念を説明できるなら、お願いします。
class Person(object):
pass
class Person:
pass
オブジェクト宣言は何をしますか?あなたはそれを使うべきですか?私は両方のプログラムをたくさん持っていますが、それがどのような違いを生み出しているのかわかりません。誰かがこの概念を説明できるなら、お願いします。
Python2ではobject
、基本クラスとして宣言すると、クラスは新しいスタイルのクラスになります。それ以外の場合は、「クラシック」クラスです。違いの中には
プロパティは、新しいスタイルのクラスでのみ機能します
新しいスタイルのクラスにはmro
メソッドがあります
新しいスタイルのクラスには、従来のクラスにはない多くの属性があります
In [288]: class Foo: pass
In [289]: dir(Foo)
Out[289]: ['__doc__', '__module__']
In [290]: class Bar(object): pass
In [291]: dir(Bar)
Out[291]: ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
クラシッククラスは、下位互換性のためにのみPython2に保持されます。定義するすべてのカスタムクラスは、新しいスタイルにする必要があります。
Python3では、すべてのクラスが新しいスタイルであるため、そこで明示的に宣言する必要はありません。
Python 2では、object
はそれを「新しいスタイルのクラス」にします。これが意味することの詳細はそれほど重要ではありませんが、肝心なのは、常にそれを使用する必要があるということです。そうしないと、正しく機能しない場合があります。
Python 3では、すべてが常に新しいスタイルのクラスであるため、そこで使用する必要はありませんobject
。