ホームページ  >  記事  >  バックエンド開発  >  Pythonのデストラクタについて詳しく解説

Pythonのデストラクタについて詳しく解説

藏色散人
藏色散人オリジナル
2019-04-01 14:28:169232ブラウズ

デストラクターは、オブジェクトが破棄されるときに呼び出されます。 Python では、メモリ管理を自動的に処理するガベージ コレクターがあるため、C ほどデストラクターは必要ありません。 __del__() メソッドは、Python ではデストラクター メソッドと呼ばれます。この関数は、オブジェクトへのすべての参照が削除されたとき、つまりオブジェクトがガベージ コレクションされたときに呼び出されます。

デストラクター宣言の構文:

def __del__(self):
  # body of destructor

例 1: 以下は、デストラクターの簡単な例です。デストラクターは、del キーワードを使用してオブジェクト「obj」へのすべての参照を削除することによって自動的に呼び出されます。

# Python program to illustrate destructor 
class Employee: 
  
    # Initializing 
    def __init__(self): 
        print('Employee created.') 
  
    # Deleting (Calling destructor) 
    def __del__(self): 
        print('Destructor called, Employee deleted.') 
  
obj = Employee() 
del obj

出力:

Employee created.
Destructor called, Employee deleted.

注: デストラクターは、プログラムの終了後、またはオブジェクトへの参照がすべて削除されたときに呼び出されます。オブジェクトがスコープ外になったときではなく、参照カウントがゼロになったとき。

例 2: この例では、上記の考慮事項について説明します。ここで、「Program End...」が出力された後にデストラクターが呼び出されることに注意してください。

# Python program to illustrate destructor 
  
class Employee: 
  
    # Initializing  
    def __init__(self): 
        print('Employee created') 
  
    # Calling destructor 
    def __del__(self): 
        print("Destructor called") 
  
def Create_obj(): 
    print('Making Object...') 
    obj = Employee() 
    print('function end...') 
    return obj 
  
print('Calling Create_obj() function...') 
obj = Create_obj() 
print('Program End...')

出力:

Calling Create_obj() function...
Making Object...
Employee created
function end...
Program End...
Destructor called

例 3: 次に、次の例を考えてみましょう:

# Python program to illustrate destructor 
  
class A: 
    def __init__(self, bb): 
        self.b = bb 
  
class B: 
    def __init__(self): 
        self.a = A(self) 
    def __del__(self): 
        print("die") 
  
def fun(): 
    b = B() 
  
fun()

出力:

die

この例では、この例では、関数 fun() が呼び出されると、クラス B のインスタンスが作成され、それ自体がクラス A に渡され、クラス B への参照が設定され、循環参照が作成されます。

通常、これらのタイプの循環参照を検出するために使用される Python のガベージ コレクターはそれらを削除しますが、この例では、カスタム デストラクターを使用してこの項目を「収集不可能」(収集不可能) としてマークします。) 。

簡単に言うと、オブジェクトが破棄される順序がわからないため、オブジェクトは放置されます。したがって、インスタンスに循環参照が含まれる場合、アプリケーションが実行されている限り、インスタンスはメモリ内に存在します。

関連する推奨事項: 「Python チュートリアル

以上がPythonのデストラクタについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。