ホームページ > バックエンド開発 > Python チュートリアル > Python の __init__、__new__、__call__ の概要

Python の __init__、__new__、__call__ の概要

WBOY
リリース: 2016-06-16 08:44:24
オリジナル
1064 人が閲覧しました

1.__new__(cls, *args, **kwargs) はオブジェクトの作成時に呼び出され、現在のオブジェクトのインスタンスを返します。注意: ここでの最初のパラメーターは cls であり、これはクラス自体です
2. __init__(self, *args, **kwargs) オブジェクトの作成後に呼び出され、現在のオブジェクトのインスタンスが初期化されます。戻り値はありません。つまり、__new__ を呼び出した後、返されたインスタンスに従って初期化されることに注意してください。ここでの最初のパラメータは self です。つまり、オブジェクト自体です [new との違いに注意してください]
3.__call__(self, *args, **kwargs) クラスがこのメソッドを実装している場合、このタイプのオブジェクトを使用するのと同等です関数として使用します。これはオーバーロードと同等です。括弧演算子

具体的な例を見てください:

コードをコピーします コードは次のとおりです:

class O(object) :

def __init__(self, *args, **kwargs):
print "init"
super(O, self).__init__(*args, **kwargs)

def __new__(cls, *args, **kwargs):
print "new", cls
return super(O, cls).__new__(cls, *args, **kwargs)

def __call__(self, *args, **kwargs):
print "call"

oo = O()
print "________"
oo()


出力される内容は次のとおりです:
コードをコピー コードは次のとおりです:

new
init
________
call

例: Python Singleton (シングルトン モード) ) 実装、それでは、いくつかの __new__ メソッドをオーバーロードできますか?
コードをコピーします。 コードは次のとおりです:

class Singleton1 ( object):
"""新しいメソッドをオーバーロード"""
def __new__(cls, *args, **kwargs):
vars(cls) の "_instance" でない場合:
cls ._instance = super(Singleton1, cls).__new__(cls, *args, **kwargs)
return cls._instance

__init__ メソッドをオーバーロードできますか?明らかに不可能です。__init__ が以前に __new__ メソッドを呼び出しており、この時点でオブジェクトが生成されているため、シングルトン モードを実装する方法はありません

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