検索

ホームページ  >  に質問  >  本文

python中的subtype是什么?

T.__new__(S, ...) -> a new object with type S, a subtype of T

这里的subtype指的是什么?

class A(int):
    pass
    
class B(int):
    def __new__(cls):
        return A.__new__(int)
        
b = B()
isinstance(b, A)
#False
type(b)
#<class 'int'>
大家讲道理大家讲道理2890日前691

全員に返信(1)返信します

  • 天蓬老师

    天蓬老师2017-04-17 17:52:46

    質問に答えてください

    subtype は文字通り 子类 です。issubclass(cls1, cls2)cls1 のサブクラスであるかどうかを判断するには、cls2 を使用します。

    使用している

    のバージョンと、python が傍受しているドキュメントはわかりませんが、公式の説明によると、T.__new__(S, ...)X.__init__(Y, ...) のインスタンス オブジェクトを作成するだけで何もしません。 Y では、 XX で判断できる属性を持っていることが前提となります。 __new__hasattr(X, '__new__')詳細な探索

    実際、ここで焦点を当てるのは

    ではなく、属性
    が何であるかです。

    subtype簡単に言うと、__new__ はオブジェクトの作成を制御し、

    はオブジェクトの初期化 (追加の属性変数の追加など) を制御し、

    はオブジェクトの破棄を制御するだけです。通常の状況では、必要なのはそれだけです。 __new__ .__init__ を気にする __del__質問について考えてみましょう。__init__ などの標準オブジェクトのインスタンス化プロセスでは、必ず

    のオブジェクトが作成されますか?

    n = N()答えはもちろんノーです。オブジェクトの作成とオブジェクトの初期化の違いを詳しく説明するコードは次のとおりです。N リーリー

    がオブジェクトを返す場合、オブジェクトと余分なパラメーターは、作成後の初期化のためにオブジェクトの

    に渡されます。

    __new____init__機能について

    さらに一歩進んで、

    のパラメータ
    は何ですか?

    リーリー __new__これには、cls のもう 1 つの重要な機能が関係します。つまり、

    にはメソッドはなく、関数のみが含まれます。

    を実行すると、実際には最初に python が実行され、次に python が実行されます。 リーリー P()要約すると、p1 = P.__new__(P)P.__init__(p1)

    属性を返すだけであるのと同様に、

    T.__new__(S, ...) とは何の関係もありません。これは T に似ており、それとは何の関係もありません。 .hello selfname追加手順X

    1.

    のみの関数の詳細については、Ruby のクラスを理解するために私の記事を読むことをお勧めします。

    2、上記のコードは

    バージョンで検証されています。python若干の違いがあります

    返事
    0
  • キャンセル返事