__new__() 関数を使用して Python でオブジェクト インスタンスを作成する方法

WBOY
リリース: 2023-08-22 12:28:48
オリジナル
927 人が閲覧しました

__new__() 関数を使用して Python でオブジェクト インスタンスを作成する方法

__new__() 関数を使用して Python でオブジェクト インスタンスを作成する方法

__new__() 関数は、オブジェクト インスタンスを作成するために Python に組み込まれた特別なメソッドです。 __init__() メソッドとは異なり、 __new__() メソッドはオブジェクトがインスタンス化される前に呼び出され、オブジェクトを作成してオブジェクトのインスタンスを返します。

Python では、オブジェクト インスタンスが作成されるときは常に、実際にはクラスの __new__() メソッドを呼び出すことによって行われます。 __new__() メソッドはオブジェクト インスタンスの作成を担当し、そのプロセスで親クラスの __new__() メソッドを呼び出し、最終的に新しいオブジェクト インスタンスを返します。

以下では、コード例を使用して、__new__() メソッドを使用してオブジェクト インスタンスを作成する方法を示します。

class MyClass(object):
    def __new__(cls, *args, **kwargs):
        print("调用了__new__()方法")
        instance = super().__new__(cls)
        return instance
    
    def __init__(self, *args, **kwargs):
        print("调用了__init__()方法")
        # 对象初始化操作

# 创建对象实例
my_obj = MyClass()
ログイン後にコピー

上記のコードでは、__new__() メソッドと __init__() メソッドを含むクラス MyClass を定義します。

__new__() メソッドでは、最初にデバッグ情報を出力し、次に super().__new__(cls) メソッドを呼び出して新しいオブジェクト インスタンスを作成します。このインスタンスは次の値を返します。 。 super().__new__(cls) を呼び出すときに、パラメータとして cls を渡したことに注意してください。これは、__new__() メソッドがパラメータ cls# を受け取るためです。 #、現在のクラスを表すために使用されます。

次に、 __init__() メソッドでデバッグ情報も出力し、必要に応じてオブジェクトを初期化できます。

最後に、MyClass のコンストラクターを呼び出して、オブジェクト インスタンス

my_obj を作成します。

上記のコードを実行すると、次の出力が表示されます。

调用了__new__()方法
调用了__init__()方法
ログイン後にコピー
出力からわかるように、__new__() メソッドが最初に呼び出され、次に __init__() メソッドが呼び出されます。と呼ばれます。これは、オブジェクト インスタンスを作成するときに、Python が最初に __new__() メソッドを呼び出してオブジェクトを作成し、次に __init__() メソッドを呼び出してオブジェクトを初期化するためです。

__new__() メソッドはクラス レベルのメソッドであり、__init__() メソッドはオブジェクト レベルのメソッドであることに注意してください。 __new__() メソッドは新しいオブジェクト インスタンスを返す必要がありますが、__init__() メソッドは値を返す必要はありません。

したがって、 __new__() メソッドを使用すると、オブジェクトの作成プロセスの制御、オブジェクトのカスタム初期化など、オブジェクトがインスタンス化される前に特別な処理を実行できます。

要約すると、__new__() メソッドは、場合によってはオブジェクトをより柔軟に作成できる非常に強力な特別なメソッドです。 __new__() メソッドの使用をマスターすることで、Python のオブジェクト指向プログラミングをより深く理解し、カスタム クラスの設計と実装に慣れることができます。

以上が__new__() 関数を使用して Python でオブジェクト インスタンスを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!