2017-04-06 3 views
0

私はメタクラスを作成し、__new____init__の両方を上書きして、(同じ)カスタムパラメータを持っています。オーバーライドされたメソッドからそれらを呼び出すと、まったく同じパラメータをtype.__new__type.__init__に渡す必要がありますか?.__ new__をタイプし、.__ init__と同じパラメータを渡す必要がありますか?

私はメタクラスから継承しているため、それをさらに専門にするために、それが必要でない場合は便利です。これらのサブクラスでは、私は__init__メソッドでほとんどの作業を行っています。 type.__new__type.__init__の両方に同じパラメータを渡す必要がある場合は、すべてのサブクラスで__new__をオーバーライドする必要があります。

答えて

0

最終的に__init__に渡されるパラメータを受け取っているとして、object.__new__。だからPythonがあなたの__new__を呼び出している場合、それはあなたが得るものです。 (最初のパラメータはもちろん、__new__の呼び出しのクラスと__init__の呼び出しのインスタンスになります)

新しい結果がチェックされます。それがクラスのインスタンスであれば、__init__が呼び出されます。

__new__がパラメータに基づいてデータを割り当てていたとしたら、間違ったパラメータが与えられた場合は、間違ったデータが割り当てられます。

私は、あなたのパラメータがオブジェクトの作成に影響しないことを知っている特定のユースケースを念頭に置いていない限り、プロトコルに従うべきだと言います。

関連する問題