質問

すべての Python 組み込みは以下のサブクラスです。 object そして、同様のユーザー定義クラスもたくさん見かけます。なぜ?授業の目的は何ですか object?それはただの空のクラスですよね?

役に立ちましたか?

解決

要するに、それは自由な魔法のポニーを設定します。

で長い、Pythonの2.2およびそれ以前の使用「古いスタイルクラス」。彼らは、クラスの特定の実装だった、と彼らは(たとえば、あなたがタイプの組み込みサブクラス化ができませんでした)いくつかの制限がありました。これの修正は、クラスの新しいスタイルを作成することでした。しかし、これを実行すると、一部の互換性のない変更を伴うだろう。だから、古いスタイルのクラスのために書かれたコードはまだ仕事、objectクラスは、すべての新しいスタイルのクラスのスーパークラスとして機能するように作成されたということを確認します。 だから、Pythonの2.xでは、class Foo: passは古いスタイルのクラスを作成し、class Foo(object): passは、新しいスタイルのクラスを作成します。

長くて、Pythonの2.2のグイドの の統一タイプとクラスを参照してくださいを。

とは、一般的に、それはいくつかのものは、(@propertyデコレータが頭に浮かぶものです)古いスタイルのクラスでは動作しませんので、すべてのあなたのクラスに新しいスタイルを作るのが習慣に取得することをお勧めします。

他のヒント

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

new styleクラスとold styleクラス間の差異については、

:参照このstackoverflowの質問する。完全な物語のために: 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 の新しい多用途機能」を使用できるようになります。

右が、新しいスタイルののクラスとしてもマーククラス。それは少しかかりますし、あなたのコードを、将来は、プルーフので、新たに開発されたクラスはobjectベースを使用する必要があります。

ショートバージョンは、スーパークラスを必要としなかった古典的なクラスは、古いコードの多くを壊すことなく回避することができなかった限界があったということです。 objectから新しいスタイルのクラス、サブクラスの概念を作成し、彼らはそう、今あなたがクールなものを行うことができます好きなプロパティを定義していない、とdictをサブクラス化することは、もはや痛みと奇妙なバグの練習です。

の詳細はPythonのドキュメントのセクション3.3である:新規作成スタイルと古典的なクラス。

のPython 2.2は、 "新しいスタイルクラス" を導入しましたサブクラスのオブジェクトではありませんでした古いスタイルのクラスに対する追加的な機能の数を持っていました。サブクラスのオブジェクトは、あなたのクラスは、新しいスタイルのクラスではなく、古いスタイルの1であることを示すために選ばれた方法だった。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top