__init__
が呼び出される前にクラスのインスタンスを作成しようとすると、__new__
メソッドが呼び出されることがわかりました。インポートコールは__new__静的メソッドですか?
a.py:
import abc
class A(abc.ABCMeta):
def __new__(cls, name, bases, namespace):
print("ttt:", cls, name, bases, namespace)
retval = abc.ABCMeta.__new__(cls, name, bases, namespace)
return retval
class B(object):
__metaclass__ = A
と
しかし、私はそれを見つけるために起こった、インスタンスを作成するモジュールwithouをインポートも__new__
は私がこれを持っていると呼びますb.py
import a
class C(B):
def a():
pass
python b.py
を実行すると、ttt
が2つ表示されます。__new__
で印刷します。だから、 、正確に呼ば新しいが、この場合には、私はあなたがクラスを定義するメタクラスを使用すると、メタクラスがこれ(暗黙のうちに「と呼ばれる」され
サイドノート: '__new__'は静的メソッドではありません。これは暗黙のうちにクラスメソッドのように動作するコンストラクタです(クラスのインスタンスではなく、最初の引数としてクラスを受け取ります)が、静的ではありません。静的とは、それが単にクラスによって名前空間になっていて、他の方法でそれに関連付けられていなかったことを意味します。 – ShadowRanger