例#1:
class Person(object):
pass
例#2:
class Person:
pass
オブジェクトの宣言は、何をしますか?あなたはそれを使うべきですか?私は両者ともプログラムの束を持っていて、それが何をしているのか分からない。誰もがこのコンセプトを説明できるのであれば、どうぞ。オブジェクト宣言はPythonクラスで何を意味しますか?使用する必要がありますか?
class Person(object):
pass
class Person:
pass
オブジェクトの宣言は、何をしますか?あなたはそれを使うべきですか?私は両者ともプログラムの束を持っていて、それが何をしているのか分からない。誰もがこのコンセプトを説明できるのであれば、どうぞ。オブジェクト宣言はPythonクラスで何を意味しますか?使用する必要がありますか?
Python2では、object
を基底クラスとして宣言すると、クラスはnew-style classになります。それ以外の場合は、 "古典的な"クラスです。違いの中で
プロパティが唯一の新しいスタイルのクラスでは動作し
新しいスタイルのクラスはmro
method
新しいスタイルのクラスは、古典的なクラスが
が不足している多くの属性を持っていることです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__']
クラスicクラスは後方互換性のためにのみPython2で保持されます。定義したすべてのカスタムクラスは、新しいスタイルにする必要があります。
Python3では、すべてのクラスが新しいスタイルなので、明示的にそのクラスを宣言する必要はありません。
Python 2では、object
はそれを「新しいスタイルのクラス」にします。これが意味することの詳細はそれほど重要ではありませんが、結論は常に使用しなければならないか、正しく動作しないことがあります。
Python 3では、すべてが常に新しいスタイルのクラスなので、object
を使用する必要はありません。
+1これ! AFAIKには、新しいスタイルのクラスを使用することには欠点はありませんので、例外なくすべてのクラスを使用する必要があります。古いスタイルのクラスは、その名前が示すように、下位互換性のためにのみ存在します(これがPython 3.0で最終的に削除された理由です)。 –
複数の古いものを提供していただき、ありがとうございます。私は人々が他の人が学ぶのを助けるために時間をとると感謝します。 – Paxwell
私はoldstyleクラスの1つの時折の利点を考えることができます:特別なメソッドの参照がインスタンス上にある可能性があります。例えば。 'a = oldstyle(); a .__ add__ = lambda * args: 'changed''は動作しますが、newstyleオブジェクトと同等の機能は動作しません。たぶん1回か2回私はこれが新しいクラスを作成せずに動作することを望みましたが、それだけです、そして、それは私の構造が再考する必要があったという印でした。 – DSM