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'>
天蓬老师2017-04-17 17:52:46
質問に答えてください
subtype
は文字通り 子类
です。issubclass(cls1, cls2)
が cls1
のサブクラスであるかどうかを判断するには、cls2
を使用します。
のバージョンと、python
が傍受しているドキュメントはわかりませんが、公式の説明によると、T.__new__(S, ...)
は X.__init__(Y, ...)
のインスタンス オブジェクトを作成するだけで何もしません。 Y
では、 X
が X
で判断できる属性を持っていることが前提となります。
__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
self
name
追加手順X
1.2、上記のコードはのみの関数の詳細については、Ruby のクラスを理解するために私の記事を読むことをお勧めします。
バージョンで検証されています。python
若干の違いがあります