ホームページ > バックエンド開発 > Python チュートリアル > Python クラスのインスタンス化で __init__() が __new__() に従わないのはどのような場合ですか?

Python クラスのインスタンス化で __init__() が __new__() に従わないのはどのような場合ですか?

Mary-Kate Olsen
リリース: 2024-12-14 14:35:15
オリジナル
772 人が閲覧しました

When Does `__init__()` Not Follow `__new__()` in Python Class Instantiation?

__new__() および __init__() 実行のシーケンスを理解する

Python の __new__() および __init__() メソッドはクラスで重要な役割を果たしますインスタンス化。 __new__() はクラスの新しいインスタンスを作成し、__init__() はそのインスタンスを初期化します。予想される実行順序は、__new__() が __init__() より前に呼び出されるというものです。

ただし、特定のシナリオではこの順序が変更される可能性があります。カスタム __new__() メソッドを実装する場合、インスタンスの作成を操作し、新しいインスタンスを作成する代わりに既存のインスタンスを返すことができます。この動作は、フライウェイト デザイン パターンなどのパターンを実装するために利用されます。

そのような場合、予期せぬものであっても、__new__() の後に __init__() が呼び出されることがあります。カスタム __new__() が既存のオブジェクトを返さない限り、__init__() は常に __new__() の後に呼び出されます。

これに対処するには、ファクトリ関数を使用するなど、より従来的な方法で目的の機能を実装することを検討してください。あるいは、カスタム __new__() メソッド内に初期化コードを含めることもできます。ただし、このアプローチは「巧妙」であると考えられるため、ベスト プラクティスとして推奨されません。

以上がPython クラスのインスタンス化で __init__() が __new__() に従わないのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート