60

すべての Python ビルトインは のサブクラスでobjectあり、多くのユーザー定義クラスも同様です。なんで?クラスの目的は何objectですか?ただの空のクラスですよね?

4

6 に答える 6

57

つまり、魔法のポニーを解放します。

長い間、Python 2.2 以前は「古いスタイルのクラス」を使用していました。これらはクラスの特定の実装であり、いくつかの制限がありました (たとえば、組み込み型をサブクラス化することはできません)。これに対する修正は、クラスの新しいスタイルを作成することでした。ただし、これを行うと、下位互換性のない変更がいくつか含まれます。そのため、古いスタイルのクラス用に記述されたコードが引き続き機能することを確認するためにobject、クラスはすべての新しいスタイルのクラスのスーパークラスとして機能するように作成されました。そのため、Python 2.X ではclass Foo: pass、古いスタイルのクラスclass Foo(object): passを作成し、新しいスタイルのクラスを作成します。

詳しくは、Guido のUnifying types and classes in Python 2.2 を参照してください。

そして、一般に、すべてのクラスを新しいスタイルにする習慣を身につけるのは良い考え@propertyです。古いスタイルのクラスでは機能しないもの (デコレータが思い浮かびます) があるからです。

于 2010-04-06T22:01:39.137 に答える
11

短い答え: サブクラス化objectにより、効果的に新しいスタイルのクラスになります (Python 3.x では自動であるため、これは不要であることに注意してください)。

new styleクラスとクラスの違いについては、このスタックオーバーフローの質問old styleを参照してください。完全なストーリーについては、Python の型とオブジェクトに関するこの素晴らしい記事を参照してください。

于 2010-04-06T22:04:07.230 に答える
4

それはクラスの「新しいスタイル」に関係しています。ここで詳細を読むことができます: http://docs.python.org/tutorial/classes.html#multiple-inheritanceおよびここでも: http://docs.python.org/reference/datamodel.html#new-style -and-classic-classes

新しいスタイルのクラスを使用すると、「__slots__、記述子、プロパティ、および __getattribute__() などの Python の新しい多目的機能」を使用できるようになります。

于 2010-04-06T22:02:32.300 に答える
3

そうです、しかしそれはクラスを新しいスタイルのクラスとしてマークします。新しく開発されたクラスはobjectベースを使用する必要があります。コストがほとんどかからず、コードの将来性が保証されるからです。

于 2010-04-06T22:00:31.623 に答える
1

簡単に言うと、スーパークラスを必要としない従来のクラスには、多くの古いコードを壊さない限り回避できない制限がありました。そのため、彼らは からサブクラス化する新しいスタイルのクラスの概念を作成し、objectプロパティの定義などのクールなことを実行できるようになり、サブクラス化dictはもはや苦痛や奇妙なバグの練習ではなくなりました。

詳細は、Python ドキュメントのセクション 3.3: New-style and classic classes にあります。

于 2010-04-06T22:03:29.870 に答える
0

Python 2.2 では、オブジェクトをサブクラス化しない古いスタイル クラスに関連する多くの追加機能を持つ「新しいスタイル クラス」が導入されました。Subclasses オブジェクトは、クラスが古いスタイルのクラスではなく、新しいスタイルのクラスであることを示すために選択された方法です。

于 2010-04-06T22:04:02.567 に答える