ホームページ > バックエンド開発 > Python チュートリアル > Python では __init__() が常に __new__() の後に呼び出されるのはなぜですか?

Python では __init__() が常に __new__() の後に呼び出されるのはなぜですか?

Patricia Arquette
リリース: 2024-12-18 01:56:09
オリジナル
226 人が閲覧しました

Why is __init__() Always Called After __new__() in Python?

__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 サイトの他の関連記事を参照してください。

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