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

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

Mary-Kate Olsen
リリース: 2024-12-20 03:16:11
オリジナル
178 人が閲覧しました

Why is Python's `__init__()` method always called after `__new__()`?

__new__() メソッドと __init__() メソッドのシーケンスを理解する

Python では、オブジェクトを作成するときに、2 つの重要なメソッドが機能します。 : __new__() および __init__()。 __init__() は一般にオブジェクトの初期化に関連付けられますが、__new__() はクラスの新しいインスタンスを作成する際の基本的な役割を果たします。

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

__new__() の後に __init__() が常に呼び出される理由はクラスに由来しますオブジェクトのインスタンス化プロセス。クラスの新しいオブジェクトを作成するとき、Python は最初に __new__() メソッドを実行します。このメソッドは、メモリの割り当て、新しいインスタンスの作成、およびそれを返す役割を果たします。

__new__() メソッドが新しいインスタンスを正常に作成すると、Python は __init__() メソッドの呼び出しを開始します。 __init__() メソッドは、その名前が示すように、属性を設定し、必要なセットアップ コードを実行することで新しいインスタンスを初期化するために使用されます。

__new__() と __init__() の相互作用の例

次の Python を考えてみましょうcode:

class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance

    def __init__(self):
        # Instance-specific initialization code
ログイン後にコピー

この例では、Singleton クラスは __new__() を使用してシングルトン設計パターンを実装します。 __new__() メソッドは、インスタンスがすでに存在するかどうかを確認し、存在する場合はそれを返します。それ以外の場合は、super() メソッドを使用して新しいインスタンスを作成し、それを _instance 属性に割り当てます。

その後、__init__() メソッドが呼び出され、新しく作成されたインスタンスが初期化されます。この場合、これを使用して、追加の属性を設定したり、その他の必要なセットアップを実行したりできます。

__new__() を使用する代替手段

__new__() は、次のような柔軟性を提供します。インスタンスの作成を制御するため、汎用コードには通常推奨されません。代替の 1 つは Factory パターンです。これを使用すると、基礎となる作成ロジックを公開せずにオブジェクトを作成できます。

結論

要約すると、__new__() と __init__() は機能します。 Python のオブジェクトのインスタンス化プロセスにおける個別の役割。 __new__() は新しいインスタンスの作成を処理し、__init__() はそれを初期化します。これらのメソッド間の相互作用を理解することは、堅牢なオブジェクト指向コードを設計および実装するために不可欠です。

以上がPython の `__init__()` メソッドが常に `__new__()` の後に呼び出されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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