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'>
光阴似箭催人老,日月如移越少年。
質問に答えてください
subtype は文字通り 子类 です。issubclass(cls1, cls2) が cls1 のサブクラスであるかどうかを判断するには、cls2 を使用します。
subtype
子类
issubclass(cls1, cls2)
cls1
cls2
のバージョンと、python が傍受しているドキュメントはわかりませんが、公式の説明によると、T.__new__(S, ...) は X.__init__(Y, ...) のインスタンス オブジェクトを作成するだけで何もしません。 Y では、 X が X で判断できる属性を持っていることが前提となります。 __new__hasattr(X, '__new__')詳細な探索
python
T.__new__(S, ...)
X.__init__(Y, ...)
Y
X
__new__
hasattr(X, '__new__')
実際、ここで焦点を当てるのは ではなく、属性
実際、ここで焦点を当てるのは
subtype簡単に言うと、__new__ はオブジェクトの作成を制御し、
はオブジェクトの破棄を制御するだけです。通常の状況では、必要なのはそれだけです。 __new__ .__init__ を気にする __del__質問について考えてみましょう。__init__ などの標準オブジェクトのインスタンス化プロセスでは、必ず
__init__
__del__
n = N()答えはもちろんノーです。オブジェクトの作成とオブジェクトの初期化の違いを詳しく説明するコードは次のとおりです。N リーリー
n = N()
N
がオブジェクトを返す場合、オブジェクトと余分なパラメーターは、作成後の初期化のためにオブジェクトの
__new____init__機能について
さらに一歩進んで、 のパラメータ
さらに一歩進んで、
リーリー __new__これには、cls のもう 1 つの重要な機能が関係します。つまり、
cls
を実行すると、実際には最初に python が実行され、次に python が実行されます。 リーリー P()要約すると、p1 = P.__new__(P) が P.__init__(p1) の
P()
p1 = P.__new__(P)
P.__init__(p1)
は T.__new__(S, ...) とは何の関係もありません。これは T に似ており、それとは何の関係もありません。 .hello selfname追加手順X
T
hello
self
name
1. のみの関数の詳細については、Ruby のクラスを理解するために私の記事を読むことをお勧めします。
のみの関数の詳細については、Ruby のクラスを理解するために私の記事を読むことをお勧めします。
バージョンで検証されています。python若干の違いがあります
使用している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)
のは
2、上記のコードはT.__new__(S, ...)
とは何の関係もありません。これはT
に似ており、それとは何の関係もありません。 .hello
self
name
追加手順X
バージョンで検証されています。
python
若干の違いがあります