すべてのPython組み込みはobject
のサブクラスであり、私も多くのユーザー定義クラスに出くわしています。なぜですか?クラスの目的は何ですかobject
?空のクラスですよね?
要するに、それは無料の魔法のポニーを設定します。
長い間、Python 2.2以前は「古いスタイルのクラス」を使用していました。これらはクラスの特定の実装であり、いくつかの制限がありました(たとえば、組み込み型をサブクラス化できませんでした)。この問題の修正は、新しいスタイルのクラスを作成することでした。ただし、これを行うと、下位互換性のない変更が行われる可能性があります。そのため、古いスタイルのクラス用に作成されたコードが引き続き機能することを確認するには、object
クラスはすべての新しいスタイルのクラスのスーパークラスとして機能するように作成されています。したがって、Python 2.Xでは、_class Foo: pass
_は古いスタイルのクラスを作成し、class Foo(object): pass
新しいスタイルクラスを作成します。
詳細については、Guidoの Python 2.2 の型とクラスの統合を参照してください。
そして、一般的に、すべてのクラスを新しいスタイルにする習慣を身につけることをお勧めします。古いスタイルのクラスでは機能しないものもあるためです(_@property
_デコレータが思い浮かびます)。 。
簡単な答え:object
をサブクラス化すると、事実上new-styleクラスになります(Python 3.x)
new style
クラスとold style
クラスの違いについては、 このスタックオーバーフローの質問 を参照してください。完全なストーリーについては、 このPythonタイプとオブジェクト)の素敵な記事 を参照してください。
それはクラスの「新しいスタイル」と関係があります。詳細については、こちらをご覧ください: http://docs.python.org/tutorial/classes.html#multiple-inheritance およびこちら: http://docs.python。 org/reference/datamodel.html#new-style-and-classic-classes
新しいスタイルのクラスを使用すると、「__ slots__、記述子、プロパティ、__ getattribute __()などのPythonの新しい多用途の機能」を使用できるようになります。
そうですが、クラスを new-style クラスとしてマークします。新しく開発したクラスはobject
ベースを使用する必要があります。これは、コードのコストがほとんどかからず、将来も保証されるためです。
短いバージョンでは、スーパークラスを必要としないクラシッククラスには、多くの古いコードを壊さずに回避できない制限がありました。そこで彼らは、object
からサブクラス化する新しいスタイルのクラスの概念を作成しました。これで、プロパティの定義などのクールなことができるようになり、dict
のサブクラス化はもはや苦痛や奇妙なバグの練習ではなくなりました。
詳細は、Python docs: 新しいスタイルとクラシッククラス)のセクション3.3にあります。
Python 2.2では「新しいスタイルクラス」が導入されました オブジェクトをサブクラス化していない古いスタイルクラスに関連する多くの追加機能がありました。サブクラスオブジェクトは、クラスが古いスタイルのクラスではなく、新しいスタイルのクラスであることを示すために選択された方法でした。