ホームページ  >  記事  >  バックエンド開発  >  Pythonの新スタイルクラスと旧スタイルクラスの違いを詳しく解説

Pythonの新スタイルクラスと旧スタイルクラスの違いを詳しく解説

高洛峰
高洛峰オリジナル
2017-03-16 17:20:471917ブラウズ

Python の新しいスタイルのクラスはバージョン 2.2 で導入されました。以前のクラスをクラシック クラスまたは古いスタイルのクラスと呼ぶことができます。

なぜ 2.2 で新しいスタイルのクラスが導入されたのですか?公式の説明は次のとおりです:

クラスと型を統一するため。

バージョン 2.1 などの 2.2 より前では、クラスと型は異なっていました。 a が ClassA のインスタンスの場合、 a.__class__ は ' class __main__.ClassA' を返し、 type(a) は常に e141da0b447516d1649b2c8293a7b62f を返します。 。新しいクラスを導入した後、たとえば、ClassB は新しいクラス、b は ClassB のインスタンス、b.__class__ と type(b) は両方とも 'class '__main__.ClassB' を返すため、統一されます。

新しいクラスを導入すると、より多くの組み込みプロパティが導入され、記述子が導入され、プロパティが計算できるなど、他の利点もあります。

前方互換性を確保するために、ユーザー定義クラスはデフォルトでクラシック クラスである必要があります。新しいクラスは、すべてのクラスの基本クラス オブジェクト、またはオブジェクトを継承する新しいクラスから継承する必要があります。

最新の Python (2.7) を使用していますが、一部の機能は古いスタイルのクラスでは動作しないことに注意してください。

そのため、新しいスタイルのクラスを確実に使用するには、2 つの方法があります:

1. メタクラス、クラス モジュール コード __metaclass__ = classname (カスタムの新しいスタイル クラス) の先頭に次のコードを追加します。 )。

2. クラスは、組み込みクラス オブジェクトから直接または間接的に継承します。

古いスタイルのクラスや古いバージョンのクラスと互換性を持たせる必要がない場合は、すべて新しいスタイルのクラスを維持してください。

Python3 では、すべてのクラスが (暗黙的に) オブジェクト クラスのサブクラスであるため、これらの問題は存在しません。

コード例:

class oldClass:            #经典类
    def __init__( self ):
        pass
 
class newClass(object):    #新类
    def __init__( self ):
        pass 
 
c1 = oldClass()
c2 = newClass()
 
c1.__class__            # 输出-> <class __main__.oldClass at 0x0137BF10>
type(c1)                # 输出-> <type &#39;instance&#39;>
 
c2.__class__            # 输出-><class &#39;__main__.newClass&#39;>
type(c2)                # 输出-><class &#39;__main__.newClass&#39;>

以上がPythonの新スタイルクラスと旧スタイルクラスの違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。