__new__() と __init__() の関係を理解する
Python の __new__() メソッドと __init__() メソッドは、クラスインスタンスの作成と初期化。 __new__() は __init__() の前に呼び出され、メモリを割り当てて新しいクラス インスタンスを構築します。一方、__init__() は、インスタンスの属性を初期化し、必要なセットアップを実行するために使用されます。
ここで、__init__() が常に __new__() の後に呼び出される理由について、質問をさらに詳しく掘り下げてみましょう。 __new__() は、作成中のクラスの新しいインスタンスを返すように設計されています。 __new__() がインスタンスを作成した後、それは初期化のためにパラメータとして __init__() に渡されます。この順次実行により、インスタンスが正常に構築された後、 __init__() がインスタンスの属性にアクセスして変更できることが保証されます。
提供された例では、なぜ __init__() が既存のインスタンスに対して実行されないのか疑問に思うかもしれません (例: a2とa3)。これは、_dict ディクショナリ内の既存のインスタンスをチェックし、見つかった場合はそれを返すカスタム ロジックを __new__() に実装しているためです。このような場合、インスタンスは既に作成され初期化されているため、__init__() はスキップされます。
意図した機能を別の方法で実装するには、__new__() を変更する代わりに標準のファクトリ パターンを使用することを検討できます。ファクトリ パターンを使用すると、オブジェクトの作成とその実装を分離できるため、コードの柔軟性と再利用性が向上します。
以上がPython では __init__() が常に __new__() の後に呼び出されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。